Skip to content
Snippets Groups Projects
Commit 11096920 authored by Marcel Nellesen's avatar Marcel Nellesen
Browse files

Merge branch 'Product/883-userManagement' into 'master'

New: Access to all projectRoles

See merge request coscine/cs/database!93
parents a3a3072e 01c37e38
Branches
Tags
1 merge request!93New: Access to all projectRoles
...@@ -12,4 +12,7 @@ ...@@ -12,4 +12,7 @@
<description>$description$</description> <description>$description$</description>
<copyright>$copyright$</copyright> <copyright>$copyright$</copyright>
</metadata> </metadata>
<files>
<file src="bin\Release\Coscine.Database.T4.dll" target="lib\net461" />
</files>
</package> </package>
\ No newline at end of file
...@@ -287,28 +287,36 @@ namespace Coscine.Database.Models ...@@ -287,28 +287,36 @@ namespace Coscine.Database.Models
return projectRoles.Count() > 0; return projectRoles.Count() > 0;
} }
public IEnumerable<Project> GetWithAccess(User user, params string[] allowedAccess) private IEnumerable<Project> GetWithAccess(User user, string[] allowedAccess, Func<IEnumerable<Guid>, IEnumerable<Project>> filter)
{ {
ProjectRoleModel projectRoleModel = new ProjectRoleModel(); ProjectRoleModel projectRoleModel = new ProjectRoleModel();
ProjectModel projectModel = new ProjectModel();
allowedAccess = allowedAccess.Select(x => x.ToLower().Trim()).ToArray(); allowedAccess = allowedAccess.Select(x => x.ToLower().Trim()).ToArray();
var allUserProjectRoles = projectRoleModel.GetAllWhere((projectRoleRelation) => projectRoleRelation.UserId == user.Id && var allUserProjectRoles = projectRoleModel.GetAllWhere((projectRoleRelation) => projectRoleRelation.UserId == user.Id &&
allowedAccess.Contains(projectRoleRelation.Role.DisplayName.ToLower())); allowedAccess.Contains(projectRoleRelation.Role.DisplayName.ToLower()));
var allowedProjectIds = allUserProjectRoles.Select((projectRole) => projectRole.ProjectId); var allowedProjectIds = allUserProjectRoles.Select((projectRole) => projectRole.ProjectId);
var allowedProjects = projectModel.GetAllWhere((project) => allowedProjectIds.Contains(project.Id) var allowedProjects = filter.Invoke(allowedProjectIds);
&& ((!project.SubProjectsSubProjectIdIds.Any()) // get top level projects not having any parent projects
|| !(from subProject in project.SubProjectsSubProjectIdIds // check if the direct parent project is accessible to the current user
where (from parentProjectRole in subProject.Project.ProjectRolesProjectIdIds
where parentProjectRole.UserId == user.Id
&& allowedAccess.Contains(parentProjectRole.Role.DisplayName.ToLower())
select parentProjectRole).Any()
select subProject).Any())
);
return allowedProjects.ToList(); return allowedProjects.ToList();
} }
public IEnumerable<Project> GetWithAccess(User user, params string[] allowedAccess)
{
return GetWithAccess(user, allowedAccess, (allowedProjectIds) => GetAllWhere((project) => allowedProjectIds.Contains(project.Id)));
}
public IEnumerable<Project> GetTopLevelWithAccess(User user, params string[] allowedAccess)
{
return GetWithAccess(user, allowedAccess, (allowedProjectIds) => GetAllWhere((project) => allowedProjectIds.Contains(project.Id) &&
((!project.SubProjectsSubProjectIdIds.Any()) // get top level projects not having any parent projects
|| !(from subProject in project.SubProjectsSubProjectIdIds // check if the direct parent project is accessible to the current user
where (from parentProjectRole in subProject.Project.ProjectRolesProjectIdIds
where parentProjectRole.UserId == user.Id
&& allowedAccess.Contains(parentProjectRole.Role.DisplayName.ToLower())
select parentProjectRole).Any()
select subProject).Any())));
}
public void AddResource(Project project, Resource resource) public void AddResource(Project project, Resource resource)
{ {
ProjectResourceModel projectResourceModel = new ProjectResourceModel(); ProjectResourceModel projectResourceModel = new ProjectResourceModel();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment