Changeset 15577
- Timestamp:
- 01/05/18 15:13:25 (6 years ago)
- Location:
- branches/HiveProjectManagement
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HiveProjectManagement/HeuristicLab.Services.Access.DataAccess/3.3/AccessService.dbml
r14748 r15577 1 1 <?xml version="1.0" encoding="utf-8"?><Database Name="HeuristicLab.ClientManagement" Class="AccessServiceDataContext" xmlns="http://schemas.microsoft.com/linqtosql/dbml/2007"> 2 <Connection Mode="AppSettings" ConnectionString="Data Source= .\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=HeuristicLab.AccessService" SettingsObjectName="HeuristicLab.Services.Access.DataAccess.Properties.Settings" SettingsPropertyName="HeuristicLab_ClientManagementConnectionString" Provider="System.Data.SqlClient" />2 <Connection Mode="AppSettings" ConnectionString="Data Source=HIVELAB;Integrated Security=SSPI;Initial Catalog=HeuristicLab.AccessService" SettingsObjectName="HeuristicLab.Services.Access.DataAccess.Properties.Settings" SettingsPropertyName="HeuristicLab_ClientManagementConnectionString" Provider="System.Data.SqlClient" /> 3 3 <Table Name="dbo.Resource" Member="Resources"> 4 4 <Type Name="Resource" InheritanceCode="Resource" IsInheritanceDefault="true"> -
branches/HiveProjectManagement/HeuristicLab.Services.Access/3.3/Interfaces/IUserManager.cs
r15500 r15577 33 33 IEnumerable<Guid> GetUserGroupIdsOfUser(Guid userId); 34 34 bool VerifyUser(Guid userId, List<Guid> allowedUserGroups); 35 IEnumerable<DataTransfer.UserGroupMapping> GetUserGroupMapping(); 35 36 } 36 37 } -
branches/HiveProjectManagement/HeuristicLab.Services.Access/3.3/UserManager.cs
r15500 r15577 90 90 } 91 91 92 public IEnumerable<DataTransfer.UserGroupMapping> GetUserGroupMapping() { 93 using (DA.AccessServiceDataContext context = new DA.AccessServiceDataContext()) { 94 var query = from u in context.UserGroupUserGroups 95 select Convert.ToDto(u); 96 return query.ToList(); 97 } 98 } 99 92 100 private bool CheckInGroupHierarchy(Guid userId, Guid group, Dictionary<Guid, Guid> ugMapping, List<DA.UserGroup> groups) { 93 101 //check all subgroups -
branches/HiveProjectManagement/HeuristicLab.Services.Hive.DataAccess/3.3/Daos/AssignedJobResourceDao.cs
r15552 r15577 30 30 } 31 31 32 public void DeleteByProjectIds(IEnumerable<Guid> projectIds) { 33 string paramProjectIds = string.Join(",", projectIds.Select(x => string.Format("'{0}'", x))); 34 if (!string.IsNullOrWhiteSpace(paramProjectIds)) { 35 string queryString = string.Format(DeleteByProjectIdsQueryString, paramProjectIds); 36 DataContext.ExecuteCommand(queryString); 37 } 38 } 39 32 40 public void DeleteByProjectIdsAndUserIds(IEnumerable<Guid> projectIds, IEnumerable<Guid> userIds) { 33 41 string paramProjectIds = string.Join(",", projectIds.Select(x => string.Format("'{0}'", x))); 34 string paramUserIds = string.Join(",", userIds. Select(x => string.Format("'{0}'", x)));42 string paramUserIds = string.Join(",", userIds.ToList().Select(x => string.Format("'{0}'", x))); 35 43 if (!string.IsNullOrWhiteSpace(paramProjectIds) && !string.IsNullOrWhiteSpace(paramUserIds)) { 36 44 string queryString = string.Format(DeleteByProjectIdsAndUserIdsQueryString, paramProjectIds, paramUserIds); … … 83 91 #region String queries 84 92 private const string DeleteByProjectIdQueryString = @" 85 DELETE FROM [AssignedJobResource] ajr86 WHERE ajr.JobId IN87 ( 88 SELECT j.JobId 89 FROM [Job] j 90 WHERE j.ProjectId = {0}93 DELETE FROM [AssignedJobResource] 94 WHERE JobId IN 95 ( 96 SELECT j.JobId 97 FROM [Job] j 98 WHERE j.ProjectId = '{0}' 91 99 ) 92 100 "; 93 101 private const string DeleteByProjectIdAndUserIdsQueryString = @" 94 DELETE FROM [AssignedJobResource] ajr95 WHERE ajr.JobId IN96 ( 97 SELECT j.JobId 98 FROM [Job] j 99 WHERE j.ProjectId = {0}102 DELETE FROM [AssignedJobResource] 103 WHERE JobId IN 104 ( 105 SELECT j.JobId 106 FROM [Job] j 107 WHERE j.ProjectId = '{0}' 100 108 AND j.OwnerUserId IN ({1}) 101 109 ) 102 110 "; 111 private const string DeleteByProjectIdsQueryString = @" 112 DELETE FROM [AssignedJobResource] 113 WHERE JobId IN 114 ( 115 SELECT j.JobId 116 FROM [Job] j 117 WHERE j.ProjectId IN ({0}) 118 ) 119 "; 103 120 private const string DeleteByProjectIdsAndUserIdsQueryString = @" 104 DELETE FROM [AssignedJobResource] ajr105 WHERE ajr.JobId IN121 DELETE FROM [AssignedJobResource] 122 WHERE JobId IN 106 123 ( 107 124 SELECT j.JobId … … 112 129 "; 113 130 private const string DeleteByProjectIdAndResourceIdsQueryString = @" 114 DELETE FROM [AssignedJobResource] ajr115 WHERE ajr.JobId IN116 ( 117 SELECT j.JobId 118 FROM [Job] j 119 WHERE j.ProjectId = {0}120 ) 121 AND ajr.ResourceId IN ({1})131 DELETE FROM [AssignedJobResource] 132 WHERE JobId IN 133 ( 134 SELECT j.JobId 135 FROM [Job] j 136 WHERE j.ProjectId = '{0}' 137 ) 138 AND ResourceId IN ({1}) 122 139 "; 123 140 private const string DeleteByProjectIdsAndResourceIdsQueryString = @" 124 DELETE FROM [AssignedJobResource] ajr125 WHERE ajr.JobId IN141 DELETE FROM [AssignedJobResource] 142 WHERE JobId IN 126 143 ( 127 144 SELECT j.JobId … … 129 146 WHERE j.ProjectId IN ({0}) 130 147 ) 131 AND ajr.ResourceId IN ({1})148 AND ResourceId IN ({1}) 132 149 "; 133 150 private const string CheckJobGrantedForResourceQueryString = @" -
branches/HiveProjectManagement/HeuristicLab.Services.Hive.DataAccess/3.3/Daos/AssignedProjectResourceDao.cs
r15546 r15577 38 38 39 39 public void DeleteByProjectIdAndResourceIds(Guid projectId, IEnumerable<Guid> resourceIds) { 40 string paramIds = string.Join(",", resourceIds. Select(x => string.Format("'{0}'", x)));40 string paramIds = string.Join(",", resourceIds.ToList().Select(x => string.Format("'{0}'", x))); 41 41 if (!string.IsNullOrWhiteSpace(paramIds)) { 42 42 string query = string.Format(DeleteByProjectIdAndResourceIdsQueryString, projectId, paramIds); … … 46 46 47 47 public void DeleteByProjectIdsAndResourceIds(IEnumerable<Guid> projectIds, IEnumerable<Guid> resourceIds) { 48 string paramProjectIds = string.Join(",", projectIds. Select(x => string.Format("'{0}'", x)));49 string paramResourceIds = string.Join(",", resourceIds. Select(x => string.Format("'{0}'", x)));50 if (!string.IsNullOrWhiteSpace(param ResourceIds)) {48 string paramProjectIds = string.Join(",", projectIds.ToList().Select(x => string.Format("'{0}'", x))); 49 string paramResourceIds = string.Join(",", resourceIds.ToList().Select(x => string.Format("'{0}'", x))); 50 if (!string.IsNullOrWhiteSpace(paramProjectIds) && !string.IsNullOrWhiteSpace(paramResourceIds)) { 51 51 string query = string.Format(DeleteByProjectIdsAndResourceIdsQueryString, paramProjectIds, paramResourceIds); 52 52 DataContext.ExecuteCommand(query); … … 54 54 } 55 55 56 public void DeleteByProjectIds(IEnumerable<Guid> projectIds) { 57 string paramProjectIds = string.Join(",", projectIds.ToList().Select(x => string.Format("'{0}'", x))); 58 if (!string.IsNullOrWhiteSpace(paramProjectIds)) { 59 string query = string.Format(DeleteByProjectIdsQueryString, paramProjectIds); 60 DataContext.ExecuteCommand(query); 61 } 62 } 63 56 64 public bool CheckProjectGrantedForResources(Guid projectId, IEnumerable<Guid> resourceIds) { 57 string paramResourceIds = string.Join(",", resourceIds. Select(x => string.Format("'{0}'", x)));65 string paramResourceIds = string.Join(",", resourceIds.ToList().Select(x => string.Format("'{0}'", x))); 58 66 if (!string.IsNullOrWhiteSpace(paramResourceIds)) { 59 67 string queryString = string.Format(CheckProjectGrantedForResourcesQueryString, projectId, paramResourceIds); … … 85 93 86 94 #region String queries 87 private const string DeleteByProjectIdAndResourceIdsQueryString = 88 @"DELETE FROM [AssignedProjectResource] 89 WHERE ProjectId = '{0}' 90 AND ResourceId IN ({1});"; 91 private const string DeleteByProjectIdsAndResourceIdsQueryString = 92 @"DELETE FROM [AssignedProjectResource] 93 WHERE ProjectId IN ({0}) 94 AND ResourceId IN ({1});"; 95 private const string DeleteByProjectIdAndResourceIdsQueryString = @" 96 DELETE FROM [AssignedProjectResource] 97 WHERE ProjectId = '{0}' 98 AND ResourceId IN ({1}); 99 "; 100 private const string DeleteByProjectIdsAndResourceIdsQueryString = @" 101 DELETE FROM [AssignedProjectResource] 102 WHERE ProjectId IN ({0}) 103 AND ResourceId IN ({1}); 104 "; 105 private const string DeleteByProjectIdsQueryString = @" 106 DELETE FROM [AssignedProjectResource] 107 WHERE ProjectId IN ({0}) 108 "; 95 109 private const string CheckProjectGrantedForResourcesQueryString = @" 96 110 WITH rtree AS -
branches/HiveProjectManagement/HeuristicLab.Services.Hive.DataAccess/3.3/Daos/ProjectDao.cs
r15552 r15577 33 33 } 34 34 35 public IEnumerable<Project> GetGrantedProjectsForUser(IEnumerable<Guid> userAndGroupIds) { 36 return GetGrantedProjectsForUserQuery(DataContext, userAndGroupIds); 35 public IEnumerable<Project> GetUsageGrantedProjectsForUser(IEnumerable<Guid> userAndGroupIds) { 36 string paramUserAndGroupIds = string.Join(",", userAndGroupIds.ToList().Select(x => string.Format("'{0}'", x))); 37 if (!string.IsNullOrWhiteSpace(paramUserAndGroupIds)) { 38 string queryString = string.Format(GetUsageGrantedProjectsForUserQueryString, paramUserAndGroupIds); 39 return DataContext.ExecuteQuery<Project>(queryString); 40 } 41 return Enumerable.Empty<Project>(); 42 } 43 44 public IEnumerable<Project> GetAdministrationGrantedProjectsForUser(Guid userId) { 45 return DataContext.ExecuteQuery<Project>(GetAdministrationGrantedProjectsForUserQueryString, userId); 37 46 } 38 47 … … 67 76 where project.ProjectId == projectId 68 77 select project).SingleOrDefault()); 69 private static readonly Func<DataContext, IEnumerable<Guid>, IEnumerable<Project>> GetGrantedProjectsForUserQuery =70 CompiledQuery.Compile((DataContext db, IEnumerable<Guid> userAndGroupIds) =>71 (from project in db.GetTable<Project>()72 join projectPermission in db.GetTable<ProjectPermission>()73 on project.ProjectId equals projectPermission.ProjectId74 where userAndGroupIds.Contains(projectPermission.GrantedUserId)75 select project).Distinct());76 78 #endregion 77 79 78 #region String queries 80 #region String queries 81 private const string GetUsageGrantedProjectsForUserQueryString = @" 82 SELECT DISTINCT p.* 83 FROM [Project] p, [ProjectPermission] pp 84 WHERE p.ProjectId = pp.ProjectId 85 AND pp.GrantedUserId IN ({0}) 86 "; 87 88 private const string GetAdministrationGrantedProjectsForUserQueryString = @" 89 WITH ptree AS 90 ( 91 SELECT ProjectId, ParentProjectId 92 FROM [Project] 93 UNION ALL 94 SELECT pt.ProjectId, p.ParentProjectId 95 FROM [Project] p 96 JOIN ptree pt ON pt.ParentProjectId = p.ProjectId AND p.ParentProjectId <> p.ProjectId AND pt.ParentProjectId <> pt.ProjectId 97 ) 98 SELECT DISTINCT parent.* 99 FROM [Project] parent 100 WHERE parent.OwnerUserId = {0} 101 UNION 102 SELECT DISTINCT child.* 103 FROM ptree, [Project] parent, [Project] child 104 WHERE ptree.ParentProjectId = parent.ProjectId 105 AND ptree.ProjectId = child.ProjectId 106 AND parent.OwnerUserId = {0} 107 "; 108 79 109 private const string GetChildProjectsByIdQuery = @" 80 110 WITH ptree AS -
branches/HiveProjectManagement/HeuristicLab.Services.Hive.DataAccess/3.3/Daos/ProjectPermissionDao.cs
r15552 r15577 38 38 39 39 public bool CheckUserGrantedForProject(Guid projectId, IEnumerable<Guid> userAndGroupIds) { 40 string paramUserAndGroupIds = string.Join(",", userAndGroupIds. Select(x => string.Format("'{0}'", x)));40 string paramUserAndGroupIds = string.Join(",", userAndGroupIds.ToList().Select(x => string.Format("'{0}'", x))); 41 41 if(!string.IsNullOrWhiteSpace(paramUserAndGroupIds)) { 42 42 string queryString = string.Format(CheckUserGrantedForProjectQueryString, projectId, paramUserAndGroupIds); … … 47 47 48 48 public void DeleteByProjectIdAndGrantedUserIds(Guid projectId, IEnumerable<Guid> grantedUserIds) { 49 string paramIds = string.Join(",", grantedUserIds. Select(x => string.Format("'{0}'", x)));49 string paramIds = string.Join(",", grantedUserIds.ToList().Select(x => string.Format("'{0}'", x))); 50 50 if (!string.IsNullOrWhiteSpace(paramIds)) { 51 51 string query = string.Format(DeleteByProjectIdAndGrantedUserIdsQueryString, projectId, paramIds); … … 55 55 56 56 public void DeleteByProjectIdsAndGrantedUserIds(IEnumerable<Guid> projectIds, IEnumerable<Guid> grantedUserIds) { 57 string paramProjectIds = string.Join(",", projectIds. Select(x => string.Format("'{0}'", x)));58 string paramUserIds = string.Join(",", grantedUserIds. Select(x => string.Format("'{0}'", x)));57 string paramProjectIds = string.Join(",", projectIds.ToList().Select(x => string.Format("'{0}'", x))); 58 string paramUserIds = string.Join(",", grantedUserIds.ToList().Select(x => string.Format("'{0}'", x))); 59 59 if (!string.IsNullOrWhiteSpace(paramProjectIds) && !string.IsNullOrWhiteSpace(paramUserIds)) { 60 60 string query = string.Format(DeleteByProjectIdsAndGrantedUserIdsQueryString, paramProjectIds, paramUserIds); … … 79 79 private const string DeleteByProjectIdsAndGrantedUserIdsQueryString = @" 80 80 DELETE FROM [ProjectPermission] 81 WHERE ProjectId IN '({0})'81 WHERE ProjectId IN ({0}) 82 82 AND GrantedUserId IN ({1}); 83 83 "; -
branches/HiveProjectManagement/HeuristicLab.Services.Hive.DataAccess/3.3/Daos/ResourceDao.cs
r15540 r15577 38 38 39 39 public bool CheckExistence(IEnumerable<Guid> ids) { 40 string paramResourceIds = string.Join(",", ids. Select(x => string.Format("'{0}'", x)));40 string paramResourceIds = string.Join(",", ids.ToList().Select(x => string.Format("'{0}'", x))); 41 41 if (!string.IsNullOrWhiteSpace(paramResourceIds)) { 42 42 string queryString = string.Format(CountExistenceQuery, paramResourceIds); 43 return DataContext.ExecuteQuery<int>(queryString). Count() == ids.Count();43 return DataContext.ExecuteQuery<int>(queryString).SingleOrDefault() == ids.Count(); 44 44 } 45 45 return false; -
branches/HiveProjectManagement/HeuristicLab.Services.Hive.DataAccess/3.3/HeuristicLab.Services.Hive.DataAccess-3.3.csproj
r15540 r15577 151 151 <Compile Include="Properties\AssemblyInfo.cs" /> 152 152 <None Include="Properties\AssemblyInfo.cs.frame" /> 153 <Compile Include="Settings.cs" /> 153 154 <Compile Include="Settings.Designer.cs"> 154 155 <AutoGen>True</AutoGen> -
branches/HiveProjectManagement/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.dbml.layout
r15528 r15577 81 81 </nestedChildShapes> 82 82 </classShape> 83 <associationConnector edgePoints="[(10.875 : 6.66429768880208); (11.25 : 6.66429768880208)]" fixedFrom=" Algorithm" fixedTo="Algorithm">83 <associationConnector edgePoints="[(10.875 : 6.66429768880208); (11.25 : 6.66429768880208)]" fixedFrom="NotFixed" fixedTo="NotFixed"> 84 84 <AssociationMoniker Name="/HiveDataContext/Plugin/Plugin_PluginData" /> 85 85 <nodes> … … 88 88 </nodes> 89 89 </associationConnector> 90 <associationConnector edgePoints="[(8.875 : 6.56814697265625); (8.5 : 6.56814697265625)]" fixedFrom=" Algorithm" fixedTo="Algorithm">90 <associationConnector edgePoints="[(8.875 : 6.56814697265625); (8.5 : 6.56814697265625)]" fixedFrom="NotFixed" fixedTo="NotFixed"> 91 91 <AssociationMoniker Name="/HiveDataContext/Plugin/Plugin_RequiredPlugin" /> 92 92 <nodes> … … 134 134 </nodes> 135 135 </associationConnector> 136 <associationConnector edgePoints="[(7.5 : 4.1170068359375); (7.5 : 5.875)]" fixedFrom=" Algorithm" fixedTo="Algorithm">136 <associationConnector edgePoints="[(7.5 : 4.1170068359375); (7.5 : 5.875)]" fixedFrom="NotFixed" fixedTo="NotFixed"> 137 137 <AssociationMoniker Name="/HiveDataContext/Task/Task_RequiredPlugin" /> 138 138 <nodes> … … 279 279 </nodes> 280 280 </associationConnector> 281 <associationConnector edgePoints="[(11.25 : 9.42390055338542); (10.375 : 9.42390055338542); (10.375 : 8); (4 : 8); (4 : 4.9631982421875); (5.125 : 4.9631982421875); (5.125 : 4.5881982421875)]" fixedFrom="NotFixed" fixedTo=" Algorithm">281 <associationConnector edgePoints="[(11.25 : 9.42390055338542); (10.375 : 9.42390055338542); (10.375 : 8); (4 : 8); (4 : 4.9631982421875); (5.125 : 4.9631982421875); (5.125 : 4.5881982421875)]" fixedFrom="NotFixed" fixedTo="NotFixed"> 282 282 <AssociationMoniker Name="/HiveDataContext/Project/Project_Job" /> 283 283 <nodes> … … 292 292 </nestedChildShapes> 293 293 </classShape> 294 <associationConnector edgePoints="[(8.031252 : 4.1170068359375); (8.031252 : 4.4375); (11.15625 : 4.4375); (11.15625 : 5.09699625651042); (11.25 : 5.09699625651042)]" fixedFrom=" Algorithm" fixedTo="Algorithm">294 <associationConnector edgePoints="[(8.031252 : 4.1170068359375); (8.031252 : 4.4375); (11.15625 : 4.4375); (11.15625 : 5.09699625651042); (11.25 : 5.09699625651042)]" fixedFrom="NotFixed" fixedTo="NotFixed"> 295 295 <AssociationMoniker Name="/HiveDataContext/Task/Task_AssignedTaskResource" /> 296 296 <nodes> … … 299 299 </nodes> 300 300 </associationConnector> 301 <associationConnector edgePoints="[(12.25 : 2.9631982421875); (12.25 : 4.5)]" fixedFrom=" Algorithm" fixedTo="Algorithm">301 <associationConnector edgePoints="[(12.25 : 2.9631982421875); (12.25 : 4.5)]" fixedFrom="NotFixed" fixedTo="NotFixed"> 302 302 <AssociationMoniker Name="/HiveDataContext/Resource/Resource_AssignedTaskResource" /> 303 303 <nodes> … … 333 333 </nodes> 334 334 </associationConnector> 335 <associationConnector edgePoints="[(5.656252 : 4.5881982421875); (5.656252 : 5.07535062109375); ( 7.41666666666667 : 5.07535062109375 : JumpStart); (7.58333333333333 : 5.07535062109375 : JumpEnd); (8.875 : 5.07535062109375)]" fixedFrom="NotFixed" fixedTo="NotFixed">335 <associationConnector edgePoints="[(5.656252 : 4.5881982421875); (5.656252 : 5.07535062109375); (8.875 : 5.07535062109375)]" fixedFrom="NotFixed" fixedTo="NotFixed"> 336 336 <AssociationMoniker Name="/HiveDataContext/Job/Job_AssignedJobResource" /> 337 337 <nodes> -
branches/HiveProjectManagement/HeuristicLab.Services.Hive.DataAccess/3.3/HiveDataContext.designer.cs
r15528 r15577 390 390 } 391 391 392 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_AssignedProjectResource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, Delete Rule="CASCADE")]392 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Resource_AssignedProjectResource", Storage="_Resource", ThisKey="ResourceId", OtherKey="ResourceId", IsForeignKey=true, DeleteOnNull=true)] 393 393 public Resource Resource 394 394 { … … 424 424 } 425 425 426 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Project_AssignedProjectResource", Storage="_Project", ThisKey="ProjectId", OtherKey="ProjectId", IsForeignKey=true, Delete Rule="CASCADE")]426 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Project_AssignedProjectResource", Storage="_Project", ThisKey="ProjectId", OtherKey="ProjectId", IsForeignKey=true, DeleteOnNull=true)] 427 427 public Project Project 428 428 { … … 5809 5809 } 5810 5810 5811 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Project_AssignedProjectResource", Storage="_AssignedResources", ThisKey="ProjectId", OtherKey="ProjectId" )]5811 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Project_AssignedProjectResource", Storage="_AssignedResources", ThisKey="ProjectId", OtherKey="ProjectId", DeleteRule="CASCADE")] 5812 5812 public EntitySet<AssignedProjectResource> AssignedProjectResources 5813 5813 { … … 5848 5848 } 5849 5849 5850 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Project_ProjectPermission", Storage="_ProjectPermissions", ThisKey="ProjectId", OtherKey="ProjectId" )]5850 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Project_ProjectPermission", Storage="_ProjectPermissions", ThisKey="ProjectId", OtherKey="ProjectId", DeleteRule="CASCADE")] 5851 5851 public EntitySet<ProjectPermission> ProjectPermissions 5852 5852 { … … 6060 6060 } 6061 6061 6062 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Project_ProjectPermission", Storage="_Project", ThisKey="ProjectId", OtherKey="ProjectId", IsForeignKey=true )]6062 [global::System.Data.Linq.Mapping.AssociationAttribute(Name="Project_ProjectPermission", Storage="_Project", ThisKey="ProjectId", OtherKey="ProjectId", IsForeignKey=true, DeleteOnNull=true)] 6063 6063 public Project Project 6064 6064 { -
branches/HiveProjectManagement/HeuristicLab.Services.Hive/3.3/HiveService.cs
r15552 r15577 764 764 var projectPermissionDao = pm.ProjectPermissionDao; 765 765 var currentUserId = UserManager.CurrentUserId; 766 return pm.UseTransaction(() => { 767 var userAndGroupIds = new List<Guid> { currentUserId }; 768 userAndGroupIds.AddRange(UserManager.GetUserGroupIdsOfUser(currentUserId)); 769 return projectDao.GetGrantedProjectsForUser(userAndGroupIds) 770 .Select(x => x.ToDto()); 766 var userAndGroupIds = new List<Guid> { currentUserId }; 767 userAndGroupIds.AddRange(UserManager.GetUserGroupIdsOfUser(currentUserId)); 768 return pm.UseTransaction(() => { 769 return projectDao.GetUsageGrantedProjectsForUser(userAndGroupIds) 770 .Select(x => x.ToDto()).ToList(); 771 }); 772 } 773 } 774 775 public IEnumerable<DT.Project> GetProjectsForAdministration() { 776 RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client); 777 bool isAdministrator = RoleVerifier.IsInRole(HiveRoles.Administrator); 778 var pm = PersistenceManager; 779 using (new PerformanceLogger("GetProjectsForAdministration")) { 780 var projectDao = pm.ProjectDao; 781 //var projectPermissionDao = pm.ProjectPermissionDao; 782 783 return pm.UseTransaction(() => { 784 if(isAdministrator) { 785 return projectDao.GetAll().Select(x => x.ToDto()).ToList(); 786 } else { 787 var currentUserId = UserManager.CurrentUserId; 788 return projectDao.GetAdministrationGrantedProjectsForUser(currentUserId) 789 .Select(x => x.ToDto()).ToList(); 790 791 } 792 771 793 //var projectPermissions = projectPermissionDao.GetAll(); 772 794 //return projectDao.GetAll().ToList() … … 786 808 787 809 #region ProjectPermission Methods 788 public void GrantProjectPermissions(Guid projectId, Guid[] grantedUserIds, bool cascading) { 789 RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client); 810 public void SaveProjectPermissions(Guid projectId, List<Guid> grantedUserIds, bool reassign, bool cascading, bool reassignCascading) { 811 RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client); 812 if (projectId == null || grantedUserIds == null) return; 790 813 AuthorizationManager.AuthorizeForProjectAdministration(projectId); 791 814 var pm = PersistenceManager; 792 815 using (new PerformanceLogger("GrantProjectPermissions")) { 793 816 var projectDao = pm.ProjectDao; 817 var projectPermissionDao = pm.ProjectPermissionDao; 818 var assignedJobResourceDao = pm.AssignedJobResourceDao; 794 819 795 820 pm.UseTransaction(() => { 796 821 var project = projectDao.GetById(projectId); 797 var projectPermissions = project.ProjectPermissions.ToList(); 822 var projectPermissions = project.ProjectPermissions.Select(x => x.GrantedUserId); 823 var addedPermissions = grantedUserIds.Except(projectPermissions); 824 var removedPermissions = projectPermissions.Except(grantedUserIds); 825 826 // remove job assignments and project permissions 827 if (reassign) { 828 assignedJobResourceDao.DeleteByProjectId(project.ProjectId); 829 project.ProjectPermissions.Clear(); 830 } else { 831 assignedJobResourceDao.DeleteByProjectIdAndUserIds(project.ProjectId, removedPermissions); 832 foreach(var item in project.ProjectPermissions.ToList().Where(x => removedPermissions.Contains(x.GrantedUserId))) { 833 project.ProjectPermissions.Remove(item); 834 } 835 } 836 pm.SubmitChanges(); 837 838 // add project permissions 798 839 foreach (var id in grantedUserIds) { 799 if (projectPermissions.All(x => x.GrantedUserId != id)) {840 if(project.ProjectPermissions.All(x => x.GrantedUserId != id)) { 800 841 project.ProjectPermissions.Add(new DA.ProjectPermission { 801 842 GrantedUserId = id, … … 804 845 } 805 846 } 847 pm.SubmitChanges(); 848 806 849 if (cascading) { 807 var childProjects = projectDao.GetChildProjectsById(projectId); 808 foreach (var p in childProjects) { 809 p.ProjectPermissions.Clear(); 850 var childProjects = projectDao.GetChildProjectsById(projectId).ToList(); 851 var childProjectIds = childProjects.Select(x => x.ProjectId).ToList(); 852 853 // remove job assignments 854 if (reassignCascading) { 855 assignedJobResourceDao.DeleteByProjectIds(childProjectIds); 856 } else { 857 assignedJobResourceDao.DeleteByProjectIdsAndUserIds(childProjectIds, removedPermissions); 858 } 859 860 foreach(var p in childProjects) { 861 // remove project permissions 862 if(reassignCascading) { 863 p.AssignedProjectResources.Clear(); 864 } else { 865 foreach(var item in p.ProjectPermissions.ToList().Where(x => removedPermissions.Contains(x.GrantedUserId))) { 866 p.ProjectPermissions.Remove(item); 867 } 868 } 869 pm.SubmitChanges(); 870 871 // add project permissions 810 872 foreach (var id in grantedUserIds) { 811 p.ProjectPermissions.Add(new DA.ProjectPermission { 812 GrantedUserId = id, 813 GrantedByUserId = UserManager.CurrentUserId 814 }); 873 if (p.ProjectPermissions.All(x => x.GrantedUserId != id)) { 874 p.ProjectPermissions.Add(new DA.ProjectPermission { 875 GrantedUserId = id, 876 GrantedByUserId = UserManager.CurrentUserId 877 }); 878 } 815 879 } 816 880 } … … 821 885 } 822 886 823 public void RevokeProjectPermissions(Guid projectId, Guid[] grantedUserIds, bool cascading) { 824 RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client); 887 public void GrantProjectPermissions(Guid projectId, List<Guid> grantedUserIds, bool cascading) { 888 throw new NotImplementedException(); 889 } 890 891 public void RevokeProjectPermissions(Guid projectId, List<Guid> grantedUserIds, bool cascading) { 892 RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client); 893 if (projectId == null || grantedUserIds == null || !grantedUserIds.Any()) return; 825 894 AuthorizationManager.AuthorizeForProjectAdministration(projectId); 826 895 var pm = PersistenceManager; … … 831 900 pm.UseTransaction(() => { 832 901 if (cascading) { 833 var childProjectIds = projectDao.GetChildProjectIdsById(projectId) ;902 var childProjectIds = projectDao.GetChildProjectIdsById(projectId).ToList(); 834 903 projectPermissionDao.DeleteByProjectIdsAndGrantedUserIds(childProjectIds, grantedUserIds); 835 904 assignedJobResourceDao.DeleteByProjectIdsAndUserIds(childProjectIds, grantedUserIds); … … 857 926 858 927 #region AssignedProjectResource Methods 859 public void AssignProjectResources(Guid projectId, Guid[] resourceIds, bool cascading) { 860 RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client); 928 // basic: remove and add assignments (resourceIds) to projectId and its depending jobs 929 // reassign: clear all assignments from project and its depending jobs, before adding new ones (resourceIds) 930 // cascading: "basic" mode for child-projects 931 // reassignCascading: "reassign" mode for child-projects 932 public void SaveProjectResourceAssignments(Guid projectId, List<Guid> resourceIds, bool reassign, bool cascading, bool reassignCascading) { 933 RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client); 934 if (projectId == null || resourceIds == null) return; 861 935 AuthorizationManager.AuthorizeForProjectResourceAdministration(projectId, resourceIds); 862 936 var pm = PersistenceManager; 863 937 using (new PerformanceLogger("AssignProjectResources")) { 864 938 var projectDao = pm.ProjectDao; 939 var assignedProjectResourceDao = pm.AssignedProjectResourceDao; 940 var assignedJobResourceDao = pm.AssignedJobResourceDao; 865 941 pm.UseTransaction(() => { 866 942 var project = projectDao.GetById(projectId); 867 var assignedProjectResources = project.AssignedProjectResources.ToList(); 868 943 var assignedResources = project.AssignedProjectResources.Select(x => x.ResourceId); 944 var addedAssignments = resourceIds.Except(assignedResources); 945 var removedAssignments = assignedResources.Except(resourceIds); 946 947 // remove job and project assignments 948 if (reassign) { 949 assignedJobResourceDao.DeleteByProjectId(project.ProjectId); 950 //assignedProjectResourceDao.DeleteByProjectIds(new List<Guid> { projectId }); 951 project.AssignedProjectResources.Clear(); 952 } else { 953 assignedJobResourceDao.DeleteByProjectIdAndResourceIds(projectId, removedAssignments); 954 //assignedProjectResourceDao.DeleteByProjectIdAndResourceIds(projectId, removedAssignments); 955 foreach (var item in project.AssignedProjectResources.ToList().Where(x => removedAssignments.Contains(x.ResourceId))) { 956 project.AssignedProjectResources.Remove(item); 957 } 958 } 959 pm.SubmitChanges(); 960 961 // add project assignments 869 962 foreach (var id in resourceIds) { 870 if ( assignedProjectResources.All(x => x.ResourceId != id)) {963 if (project.AssignedProjectResources.All(x => x.ResourceId != id)) { 871 964 project.AssignedProjectResources.Add(new DA.AssignedProjectResource { 872 965 ResourceId = id … … 874 967 } 875 968 } 969 pm.SubmitChanges(); 970 876 971 if (cascading) { 877 var childProjects = projectDao.GetChildProjectsById(projectId); 972 var childProjects = projectDao.GetChildProjectsById(projectId).ToList(); 973 974 // remove job assignments 975 if (reassignCascading) { 976 assignedJobResourceDao.DeleteByProjectIds(childProjects.Select(x => x.ProjectId).ToList()); 977 } else { 978 var childProjectIds = childProjects.Select(x => x.ProjectId).ToList(); 979 assignedJobResourceDao.DeleteByProjectIdsAndResourceIds(childProjectIds, removedAssignments); 980 } 878 981 foreach (var p in childProjects) { 879 p.AssignedProjectResources.Clear(); 982 // remove project assignments 983 if (reassignCascading) { 984 //assignedProjectResourceDao.DeleteByProjectIds(new List<Guid> { p.ProjectId }); 985 p.AssignedProjectResources.Clear(); 986 } else { 987 //assignedProjectResourceDao.DeleteByProjectIdAndResourceIds(p.ProjectId, removedAssignments); 988 foreach (var item in p.AssignedProjectResources.ToList().Where(x => removedAssignments.Contains(x.ResourceId))) { 989 p.AssignedProjectResources.Remove(item); 990 } 991 } 992 pm.SubmitChanges(); 993 994 // add project assignments 880 995 foreach (var id in resourceIds) { 881 p.AssignedProjectResources.Add(new DA.AssignedProjectResource { 882 ResourceId = id 883 }); 996 if(p.AssignedProjectResources.All(x => x.ResourceId != id)) { 997 p.AssignedProjectResources.Add(new DA.AssignedProjectResource { 998 ResourceId = id 999 }); 1000 } 884 1001 } 885 1002 } … … 890 1007 } 891 1008 892 public void UnassignProjectResources(Guid projectId, Guid[] resourceIds, bool cascading) { 893 RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client); 1009 public void AssignProjectResources(Guid projectId, List<Guid> resourceIds, bool cascading) { 1010 throw new NotImplementedException(); 1011 } 1012 1013 // basic: unassign resourceIds from project and depending jobs 1014 // cascading: unassign resourceIds from all child-projects and their depending jobs 1015 public void UnassignProjectResources(Guid projectId, List<Guid> resourceIds, bool cascading) { 1016 RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client); 1017 if (projectId == null || resourceIds == null || !resourceIds.Any()) return; 894 1018 AuthorizationManager.AuthorizeForProjectResourceAdministration(projectId, resourceIds); 895 1019 var pm = PersistenceManager; … … 900 1024 pm.UseTransaction(() => { 901 1025 if (cascading) { 902 var childProjectIds = projectDao.GetChildProjectIdsById(projectId) ;1026 var childProjectIds = projectDao.GetChildProjectIdsById(projectId).ToList(); 903 1027 assignedProjectResourceDao.DeleteByProjectIdsAndResourceIds(childProjectIds, resourceIds); 904 1028 assignedJobResourceDao.DeleteByProjectIdsAndResourceIds(childProjectIds, resourceIds); … … 970 1094 using (new PerformanceLogger("GetSlaves")) { 971 1095 var slaveDao = pm.SlaveDao; 972 var resourcePermissionDao = pm.ProjectPermissionDao;1096 //var projectPermissionDao = pm.ProjectPermissionDao; 973 1097 var currentUserId = UserManager.CurrentUserId; 974 1098 return pm.UseTransaction(() => { 975 var resourcePermissions = resourcePermissionDao.GetAll(); 976 return slaveDao.GetAll().ToList() 977 .Where(x => isAdministrator 978 || x.OwnerUserId == null 979 || x.OwnerUserId == currentUserId 980 || UserManager.VerifyUser(currentUserId, resourcePermissions 981 //.Where(y => y.ResourceId == x.ResourceId) 982 .Select(z => z.GrantedUserId) 983 .ToList()) 984 ) 985 .Select(x => x.ToDto()) 986 .ToList(); 1099 return slaveDao.GetAll().ToList() 1100 .Where( x => isAdministrator 1101 || x.OwnerUserId == null 1102 || x.OwnerUserId == currentUserId) 1103 .Select(x => x.ToDto()) 1104 .ToList(); 1105 //var projectPermissions = projectPermissionDao.GetAll(); 1106 //return slaveDao.GetAll().ToList() 1107 // .Where(x => isAdministrator 1108 // || x.OwnerUserId == null 1109 // || x.OwnerUserId == currentUserId 1110 // || UserManager.VerifyUser(currentUserId, projectPermissions 1111 // //.Where(y => y.ResourceId == x.ResourceId) 1112 // .Select(z => z.GrantedUserId) 1113 // .ToList()) 1114 // ) 1115 // .Select(x => x.ToDto()) 1116 // .ToList(); 987 1117 }); 988 1118 } … … 995 1125 using (new PerformanceLogger("GetSlaveGroups")) { 996 1126 var slaveGroupDao = pm.SlaveGroupDao; 997 var resourcePermissionDao = pm.ProjectPermissionDao;1127 var projectPermissionDao = pm.ProjectPermissionDao; 998 1128 var currentUserId = UserManager.CurrentUserId; 999 1129 return pm.UseTransaction(() => { 1000 var resourcePermissions = resourcePermissionDao.GetAll();1130 //var projectPermissions = projectPermissionDao.GetAll(); 1001 1131 return slaveGroupDao.GetAll().ToList() 1002 1132 .Where(x => isAdministrator 1003 1133 || x.OwnerUserId == null 1004 1134 || x.OwnerUserId == currentUserId 1005 || UserManager.VerifyUser(currentUserId, resourcePermissions1006 //.Where(y => y.ResourceId == x.ResourceId)1007 .Select(z => z.GrantedUserId)1008 .ToList())1009 1135 //|| UserManager.VerifyUser(currentUserId, projectPermissions 1136 // //.Where(y => y.ResourceId == x.ResourceId) 1137 // .Select(z => z.GrantedUserId) 1138 // .ToList()) 1139 ) 1010 1140 .Select(x => x.ToDto()) 1011 1141 .ToList(); … … 1220 1350 var user = ServiceLocator.Instance.UserManager.GetUserByName(username); 1221 1351 return user != null ? (Guid?)user.ProviderUserKey ?? Guid.Empty : Guid.Empty; 1352 } 1353 1354 public Dictionary<Guid, HashSet<Guid>> GetUserGroupTree() { 1355 var userGroupTree = new Dictionary<Guid, HashSet<Guid>>(); 1356 var userGroupMapping = UserManager.GetUserGroupMapping(); 1357 1358 foreach(var ugm in userGroupMapping) { 1359 if (ugm.Parent == null || ugm.Child == null) continue; 1360 1361 if (!userGroupTree.ContainsKey(ugm.Parent)) { 1362 userGroupTree.Add(ugm.Parent, new HashSet<Guid>()); 1363 } 1364 userGroupTree[ugm.Parent].Add(ugm.Child); 1365 } 1366 1367 return userGroupTree; 1222 1368 } 1223 1369 #endregion -
branches/HiveProjectManagement/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs
r15552 r15577 75 75 // authorize if user is admin or resource owner 76 76 public void AuthorizeForResourceAdministration(Guid resourceId) { 77 var currentUserId = UserManager.CurrentUserId; 77 78 var pm = PersistenceManager; 78 79 var resourceDao = pm.ResourceDao; … … 81 82 if (resource == null) throw new SecurityException(NOT_AUTHORIZED_USERRESOURCE); 82 83 83 if (resource.OwnerUserId != UserManager.CurrentUserId84 if (resource.OwnerUserId != currentUserId 84 85 && !RoleVerifier.IsInRole(HiveRoles.Administrator)) { 85 86 throw new SecurityException(NOT_AUTHORIZED_USERRESOURCE); … … 90 91 // authorize if user is admin, project owner or owner of a parent project 91 92 public void AuthorizeForProjectAdministration(Guid projectId) { 93 if (projectId == null) return; 94 var currentUserId = UserManager.CurrentUserId; 92 95 var pm = PersistenceManager; 93 96 var projectDao = pm.ProjectDao; … … 98 101 99 102 var projectBranch = projectDao.GetCurrentAndParentProjectsById(projectId); 100 if(!projectBranch.Select(x => x.OwnerUserId).Contains( UserManager.CurrentUserId)103 if(!projectBranch.Select(x => x.OwnerUserId).Contains(currentUserId) 101 104 && !RoleVerifier.IsInRole(HiveRoles.Administrator)) { 102 105 throw new SecurityException(NOT_AUTHORIZED_USERPROJECT); … … 107 110 // authorize if user is admin, or owner of a parent project, for which the resources are assigned to 108 111 public void AuthorizeForProjectResourceAdministration(Guid projectId, IEnumerable<Guid> resourceIds) { 112 if (projectId == null) return; 113 var currentUserId = UserManager.CurrentUserId; 109 114 var pm = PersistenceManager; 110 115 var projectDao = pm.ProjectDao; … … 117 122 118 123 // check if resourceIds exist 119 if ( !resourceDao.CheckExistence(resourceIds))124 if (resourceIds != null && resourceIds.Any() && !resourceDao.CheckExistence(resourceIds)) 120 125 throw new SecurityException(NOT_AUTHORIZED_USERRESOURCE); 121 126 … … 123 128 if (RoleVerifier.IsInRole(HiveRoles.Administrator)) return; 124 129 125 // check if user is owner of a parent project and... 130 // check if user is owner of a parent project 131 var projectBranch = projectDao.GetParentProjectsById(projectId); 132 if (!projectBranch.Select(x => x.OwnerUserId).Contains(currentUserId) 133 && !RoleVerifier.IsInRole(HiveRoles.Administrator)) { 134 throw new SecurityException(NOT_AUTHORIZED_USERPROJECT); 135 } 136 126 137 // check if the all argument resourceIds are among the assigned resources of the owned projects 127 var grantedResourceIds = assignedProjectResourceDao.GetAllGrantedResourceIdsOfOwnedParentProjects(projectId, UserManager.CurrentUserId);138 var grantedResourceIds = assignedProjectResourceDao.GetAllGrantedResourceIdsOfOwnedParentProjects(projectId, currentUserId); 128 139 if(resourceIds.Except(grantedResourceIds).Any()) { 129 140 throw new SecurityException(NOT_AUTHORIZED_USERRESOURCE); … … 134 145 // Check if a project is authorized to use a list of resources 135 146 public void AuthorizeProjectForResourcesUse(Guid projectId, IEnumerable<Guid> resourceIds) { 147 if (projectId == null || resourceIds == null || !resourceIds.Any()) return; 136 148 var pm = PersistenceManager; 137 149 var assignedProjectResourceDao = pm.AssignedProjectResourceDao; … … 143 155 // note: administrators and project owner are NOT automatically granted 144 156 public void AuthorizeUserForProjectUse(Guid userId, Guid projectId) { 157 if (userId == null || projectId == null) return; 145 158 var pm = PersistenceManager; 146 159 // collect current and group membership Ids … … 166 179 167 180 private void AuthorizeJob(IPersistenceManager pm, Guid jobId, DT.Permission requiredPermission) { 181 var currentUserId = UserManager.CurrentUserId; 168 182 var requiredPermissionEntity = requiredPermission.ToEntity(); 169 DA.Permission permission = GetPermissionForJob(pm, jobId, UserManager.CurrentUserId);183 DA.Permission permission = GetPermissionForJob(pm, jobId, currentUserId); 170 184 if (permission == Permission.NotAllowed 171 185 || ((permission != requiredPermissionEntity) && requiredPermissionEntity == Permission.Full)) { -
branches/HiveProjectManagement/HeuristicLab.Services.Hive/3.3/ServiceContracts/IHiveService.cs
r15546 r15577 147 147 [OperationContract] 148 148 IEnumerable<Project> GetProjects(); 149 150 [OperationContract] 151 IEnumerable<Project> GetProjectsForAdministration(); 149 152 #endregion 150 153 151 154 #region ProjectPermission Methods 152 155 [OperationContract] 153 void GrantProjectPermissions(Guid projectId, Guid[] grantedUserIds, bool cascading); 154 155 [OperationContract] 156 void RevokeProjectPermissions(Guid projectId, Guid[] grantedUserIds, bool cascading); 156 void SaveProjectPermissions(Guid projectId, List<Guid> grantedUserIds, bool reassign, bool cascading, bool reassignCascading); 157 158 [OperationContract] 159 void GrantProjectPermissions(Guid projectId, List<Guid> grantedUserIds, bool cascading); 160 161 [OperationContract] 162 void RevokeProjectPermissions(Guid projectId, List<Guid> grantedUserIds, bool cascading); 157 163 158 164 [OperationContract] … … 162 168 #region AssignedProjectResource Methods 163 169 [OperationContract] 164 void AssignProjectResources(Guid projectId, Guid[] resourceIds, bool cascading); 165 166 [OperationContract] 167 void UnassignProjectResources(Guid projectId, Guid[] resourceIds, bool cascading); 170 void SaveProjectResourceAssignments(Guid projectId, List<Guid> resourceIds, bool reassign, bool cascading, bool reassignCascading); 171 172 [OperationContract] 173 void AssignProjectResources(Guid projectId, List<Guid> resourceIds, bool cascading); 174 175 [OperationContract] 176 void UnassignProjectResources(Guid projectId, List<Guid> resourceIds, bool cascading); 168 177 169 178 [OperationContract] … … 235 244 [OperationContract] 236 245 Guid GetUserIdByUsername(string username); 246 247 [OperationContract] 248 Dictionary<Guid, HashSet<Guid>> GetUserGroupTree(); 237 249 #endregion 238 250
Note: See TracChangeset
for help on using the changeset viewer.