Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
P
Project
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Labels
Merge Requests
0
Merge Requests
0
Requirements
Requirements
List
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Environments
Analytics
Analytics
Code Review
Insights
Issue
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Coscine
B
backend
apis
Project
Commits
6ff32f04
Commit
6ff32f04
authored
Jul 25, 2019
by
Benedikt Heinrichs
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New: Member Handling Api Implementation (coscine/issues#182)
parent
d6a3c2ca
Changes
7
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
231 additions
and
1 deletion
+231
-1
src/Project/Controllers/ProjectRoleController.cs
src/Project/Controllers/ProjectRoleController.cs
+102
-0
src/Project/Controllers/RoleController.cs
src/Project/Controllers/RoleController.cs
+33
-0
src/Project/Models/ProjectRoleModel.cs
src/Project/Models/ProjectRoleModel.cs
+24
-1
src/Project/Project.csproj
src/Project/Project.csproj
+5
-0
src/Project/ReturnObjects/ProjectRoleObject.cs
src/Project/ReturnObjects/ProjectRoleObject.cs
+25
-0
src/Project/ReturnObjects/RoleObject.cs
src/Project/ReturnObjects/RoleObject.cs
+19
-0
src/Project/ReturnObjects/UserObject.cs
src/Project/ReturnObjects/UserObject.cs
+23
-0
No files found.
src/Project/Controllers/ProjectRoleController.cs
0 → 100644
View file @
6ff32f04
using
Coscine.Api.Project.Models
;
using
Coscine.Api.Project.ReturnObjects
;
using
Coscine.ApiCommons
;
using
Coscine.ApiCommons.Exceptions
;
using
Coscine.ApiCommons.Factories
;
using
Coscine.Database.Model
;
using
Microsoft.AspNetCore.Mvc
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
Coscine.Api.Project.Controllers
{
public
class
ProjectRoleController
:
Controller
{
private
readonly
Authenticator
_authenticator
;
private
readonly
ProjectRoleModel
_projectRoleModel
;
public
ProjectRoleController
()
{
_authenticator
=
new
Authenticator
(
this
,
Program
.
Configuration
);
_projectRoleModel
=
new
ProjectRoleModel
();
}
[
Route
(
"[controller]/{projectId}"
)]
public
IActionResult
Index
(
string
projectId
)
{
return
Ok
(
_authenticator
.
ValidateAndExecute
((
user
)
=>
{
UserModel
userModel
=
new
UserModel
();
RoleModel
roleModel
=
new
RoleModel
();
ProjectModel
projectModel
=
new
ProjectModel
();
Guid
.
TryParse
(
projectId
,
out
Guid
projectIdGuid
);
if
(
projectModel
.
OwnsProject
(
user
,
projectModel
.
GetById
(
projectIdGuid
)))
{
return
_projectRoleModel
.
GetAllWhere
((
projectRole
)
=>
(
projectRole
.
UserId
==
user
.
Id
&&
projectRole
.
ProjectId
==
projectIdGuid
)
).
Select
((
projectRole
)
=>
{
User
userInst
=
projectRole
.
User
;
if
(
userInst
==
null
)
{
userInst
=
userModel
.
GetById
(
projectRole
.
UserId
);
}
Role
role
=
projectRole
.
Role
;
if
(
role
==
null
)
{
role
=
roleModel
.
GetById
(
projectRole
.
RoleId
);
}
return
new
ProjectRoleObject
(
projectRole
.
ProjectId
,
new
UserObject
(
userInst
.
Id
,
userInst
.
DisplayName
),
new
RoleObject
(
role
.
Id
,
role
.
DisplayName
));
});
}
else
{
throw
new
UnauthorizedAccessException
(
"User is not allowed to list all users to the given project!"
);
}
}));
}
[
HttpPost
(
"[controller]"
)]
public
IActionResult
Set
()
{
return
Ok
(
_authenticator
.
ValidateAndExecute
((
user
)
=>
{
ProjectRoleObject
projectRoleObject
=
ObjectFactory
<
ProjectRoleObject
>.
DeserializeFromStream
(
Request
.
Body
);
ProjectModel
projectModel
=
new
ProjectModel
();
if
(
projectModel
.
OwnsProject
(
user
,
projectModel
.
GetById
(
projectRoleObject
.
ProjectId
)))
{
return
_projectRoleModel
.
SetFromObject
(
projectRoleObject
);
}
else
{
throw
new
NotAuthorizedException
(
"The user is not authorized to store a project role to the given project!"
);
}
}));
}
[
HttpDelete
(
"[controller]"
)]
public
IActionResult
Delete
()
{
return
Ok
(
_authenticator
.
ValidateAndExecute
((
user
)
=>
{
ProjectRoleObject
projectRoleObject
=
ObjectFactory
<
ProjectRoleObject
>.
DeserializeFromStream
(
Request
.
Body
);
ProjectModel
projectModel
=
new
ProjectModel
();
if
(
projectModel
.
OwnsProject
(
user
,
projectModel
.
GetById
(
projectRoleObject
.
ProjectId
)))
{
return
_projectRoleModel
.
Delete
(
_projectRoleModel
.
GetWhere
((
projectRole
)
=>
projectRole
.
ProjectId
==
projectRoleObject
.
ProjectId
&&
projectRole
.
UserId
==
projectRoleObject
.
User
.
Id
&&
projectRole
.
RoleId
==
projectRoleObject
.
Role
.
Id
));
}
else
{
throw
new
NotAuthorizedException
(
"The user is not authorized to delete a project role for the given project!"
);
}
}));
}
}
}
src/Project/Controllers/RoleController.cs
0 → 100644
View file @
6ff32f04
using
Coscine.Api.Project.Models
;
using
Coscine.Api.Project.ReturnObjects
;
using
Coscine.ApiCommons
;
using
Microsoft.AspNetCore.Mvc
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
Coscine.Api.Project.Controllers
{
public
class
RoleController
:
Controller
{
private
readonly
Authenticator
_authenticator
;
private
readonly
RoleModel
_roleModel
;
public
RoleController
()
{
_authenticator
=
new
Authenticator
(
this
,
Program
.
Configuration
);
_roleModel
=
new
RoleModel
();
}
[
Route
(
"[controller]"
)]
public
IActionResult
Index
()
{
return
Ok
(
_authenticator
.
ValidateAndExecute
((
user
)
=>
{
return
_roleModel
.
GetAll
().
Select
((
role
)
=>
new
RoleObject
(
role
.
Id
,
role
.
DisplayName
));
}));
}
}
}
src/Project/Models/ProjectRoleModel.cs
View file @
6ff32f04
using
Coscine.ApiCommons.Models
;
using
Coscine.Api.Project.ReturnObjects
;
using
Coscine.ApiCommons.Models
;
using
Coscine.Database.Model
;
using
LinqToDB
;
using
System
;
using
System.Linq
;
using
System.Linq.Expressions
;
namespace
Coscine.Api.Project.Models
...
...
@@ -12,6 +14,27 @@ namespace Coscine.Api.Project.Models
{
}
public
ProjectRole
SetFromObject
(
ProjectRoleObject
projectRoleObject
)
{
// Remove existing roles if they exist
var
existingRoles
=
GetAllWhere
((
dbProjectRole
)
=>
dbProjectRole
.
ProjectId
==
projectRoleObject
.
ProjectId
&&
dbProjectRole
.
UserId
==
projectRoleObject
.
User
.
Id
);
if
(
existingRoles
.
Count
()
>
0
)
{
foreach
(
var
role
in
existingRoles
)
{
Delete
(
role
);
}
}
ProjectRole
projectRole
=
new
ProjectRole
()
{
ProjectId
=
projectRoleObject
.
ProjectId
,
UserId
=
projectRoleObject
.
User
.
Id
,
RoleId
=
projectRoleObject
.
Role
.
Id
};
Insert
(
projectRole
);
return
projectRole
;
}
public
override
Expression
<
Func
<
ProjectRole
,
Guid
>>
GetIdFromObject
()
{
...
...
src/Project/Project.csproj
View file @
6ff32f04
...
...
@@ -565,7 +565,9 @@
<ItemGroup>
<Compile
Include=
"Controllers\ProjectController.cs"
/>
<Compile
Include=
"Controllers\ResourceController.cs"
/>
<Compile
Include=
"Controllers\RoleController.cs"
/>
<Compile
Include=
"Controllers\SubProjectController.cs"
/>
<Compile
Include=
"Controllers\ProjectRoleController.cs"
/>
<Compile
Include=
"Models\ProjectModel.cs"
/>
<Compile
Include=
"Models\ProjectResourceModel.cs"
/>
<Compile
Include=
"Models\ProjectRoleModel.cs"
/>
...
...
@@ -577,8 +579,11 @@
<Compile
Include=
"Program.cs"
/>
<Compile
Include=
"Properties\AssemblyInfo.cs"
/>
<Compile
Include=
"ReturnObjects\ProjectObject.cs"
/>
<Compile
Include=
"ReturnObjects\ProjectRoleObject.cs"
/>
<Compile
Include=
"ReturnObjects\ResourceObject.cs"
/>
<Compile
Include=
"ReturnObjects\ResourceTypeObject.cs"
/>
<Compile
Include=
"ReturnObjects\RoleObject.cs"
/>
<Compile
Include=
"ReturnObjects\UserObject.cs"
/>
<Compile
Include=
"Startup.cs"
/>
</ItemGroup>
<ItemGroup>
...
...
src/Project/ReturnObjects/ProjectRoleObject.cs
0 → 100644
View file @
6ff32f04
using
Coscine.ApiCommons.ReturnObjects
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
Coscine.Api.Project.ReturnObjects
{
[
Serializable
]
public
class
ProjectRoleObject
:
IReturnObject
{
public
Guid
ProjectId
{
get
;
set
;
}
public
UserObject
User
{
get
;
set
;
}
public
RoleObject
Role
{
get
;
set
;
}
public
ProjectRoleObject
(
Guid
projectId
,
UserObject
user
,
RoleObject
role
)
{
ProjectId
=
projectId
;
User
=
user
;
Role
=
role
;
}
}
}
src/Project/ReturnObjects/RoleObject.cs
0 → 100644
View file @
6ff32f04
using
Coscine.ApiCommons.ReturnObjects
;
using
System
;
namespace
Coscine.Api.Project.ReturnObjects
{
[
Serializable
]
public
class
RoleObject
:
IReturnObject
{
public
Guid
Id
{
get
;
set
;
}
public
string
DisplayName
{
get
;
set
;
}
public
RoleObject
(
Guid
id
,
string
displayName
)
{
Id
=
id
;
DisplayName
=
displayName
;
}
}
}
\ No newline at end of file
src/Project/ReturnObjects/UserObject.cs
0 → 100644
View file @
6ff32f04
using
Coscine.ApiCommons.ReturnObjects
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
namespace
Coscine.Api.Project.ReturnObjects
{
[
Serializable
]
public
class
UserObject
:
IReturnObject
{
public
Guid
Id
{
get
;
set
;
}
public
string
DisplayName
{
get
;
set
;
}
public
UserObject
(
Guid
id
,
string
displayName
)
{
Id
=
id
;
DisplayName
=
displayName
;
}
}
}
Ghost User
@ghost
mentioned in commit
f91a1c23
·
Aug 16, 2019
mentioned in commit
f91a1c23
mentioned in commit f91a1c2321609c4d0768b3560622779d49efc6a3
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment