Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/10/18 23:06:00 (6 years ago)
Author:
jzenisek
Message:

#2839: fixed couple of minor issues

  • changed tags in resource selector
  • added project information in job list and adapted sortation
  • fixed hand-down save by withdrawing additional offset-rights (permissions, resources),...
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2839_HiveProjectManagement/HeuristicLab.Services.Hive/3.3/HiveService.cs

    r15978 r15992  
    4343    private const string NOT_AUTHORIZED_PROJECTRESOURCE = "Selected project is not authorized to access the requested resource";
    4444    private const string NOT_AUTHORIZED_USERPROJECT = "Current user is not authorized to access the requested project";
     45    private const string NOT_AUTHORIZED_PROJECTOWNER = "The set user is not authorized to own the project";
    4546    private const string NO_JOB_UPDATE_POSSIBLE = "This job has already been flagged for deletion, thus, it can not be updated anymore.";
    4647
     
    768769      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    769770      // check if current (non-admin) user is owner of one of projectDto's-parents
     771      // note: non-admin users are not allowed to administer root projects (i.e. projects without parental entry)
    770772      if (!RoleVerifier.IsInRole(HiveRoles.Administrator)) {
    771         if(projectDto.ParentProjectId.HasValue) {
     773        if(projectDto != null && projectDto.ParentProjectId.HasValue) {
    772774          AuthorizationManager.AuthorizeForProjectAdministration(projectDto.ParentProjectId.Value, false);
    773775        } else {
     
    775777        }
    776778      }
    777      
     779
     780      // check that non-admins can not be set as owner of root projects
     781      if (projectDto != null && !projectDto.ParentProjectId.HasValue) {
     782        var owner = UserManager.GetUserById(projectDto.OwnerUserId);
     783        if (owner == null || !RoleVerifier.IsUserInRole(owner.UserName, HiveRoles.Administrator)) {
     784          throw new SecurityException(NOT_AUTHORIZED_PROJECTOWNER);
     785        }
     786      }
     787
    778788      var pm = PersistenceManager;
    779789      using (new PerformanceLogger("AddProject")) {
     
    797807      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    798808      // check if current (non-admin) user is owner of the project or the projectDto's-parents
     809      // note: non-admin users are not allowed to administer root projects (i.e. projects without parental entry)
    799810      if (!RoleVerifier.IsInRole(HiveRoles.Administrator)) {
    800         AuthorizationManager.AuthorizeForProjectAdministration(projectDto.Id, false);
    801       }
    802 
     811        if (projectDto != null && projectDto.ParentProjectId.HasValue) {
     812          AuthorizationManager.AuthorizeForProjectAdministration(projectDto.Id, false);
     813        } else {
     814          throw new SecurityException(NOT_AUTHORIZED_USERPROJECT);
     815        }
     816      }
     817
     818      // check that non-admins can not be set as owner of root projects
     819      if(projectDto != null && !projectDto.ParentProjectId.HasValue) {
     820        var owner = UserManager.GetUserById(projectDto.OwnerUserId);
     821        if(owner == null || !RoleVerifier.IsUserInRole(owner.UserName, HiveRoles.Administrator)) {
     822          throw new SecurityException(NOT_AUTHORIZED_PROJECTOWNER);
     823        }
     824      }
     825     
    803826      var pm = PersistenceManager;
    804827      using (new PerformanceLogger("UpdateProject")) {
     
    863886      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    864887      // check if current (non-admin) user is owner of one of the projectDto's-parents
    865       if (!RoleVerifier.IsInRole(HiveRoles.Administrator)) {
     888      // note: non-admin users are not allowed to administer root projects (i.e. projects without parental entry)
     889      if (!RoleVerifier.IsInRole(HiveRoles.Administrator)) {       
    866890        AuthorizationManager.AuthorizeForProjectAdministration(projectId, true);
    867891      }
     
    922946            .Select(x => x.ToDto()).ToList();
    923947          var now = DateTime.Now;
    924           return projects.Where(x => x.StartDate <= now && x.EndDate >= now).ToList();
     948          return projects.Where(x => x.StartDate <= now && (x.EndDate == null || x.EndDate >= now)).ToList();
    925949        });
    926950      }
     
    9991023          if (project == null) return;
    10001024          var projectPermissions = project.ProjectPermissions.Select(x => x.GrantedUserId).ToArray();
     1025
     1026          // guarantee that project owner is always permitted
     1027          if(!grantedUserIds.Contains(project.OwnerUserId)) {
     1028            grantedUserIds.Add(project.OwnerUserId);
     1029          }
     1030
    10011031          //var addedPermissions = grantedUserIds.Except(projectPermissions);
    10021032          var removedPermissions = projectPermissions.Except(grantedUserIds);
     
    10301060
    10311061            // (3) get all Guids which are in removedPermissions but not in grantedUserIds
    1032             var definatelyNotPermittedGuids = notpermittedGuids.Except(permittedGuids);
     1062            var definitelyNotPermittedGuids = notpermittedGuids.Except(permittedGuids);
    10331063
    10341064            // (4) delete jobs of those
    1035             assignedJobResourceDao.DeleteByProjectIdAndUserIds(project.ProjectId, definatelyNotPermittedGuids);
     1065            assignedJobResourceDao.DeleteByProjectIdAndUserIds(project.ProjectId, definitelyNotPermittedGuids);
    10361066
    10371067
     
    10681098
    10691099            foreach(var p in childProjects) {
     1100              var cpAssignedPermissions = p.ProjectPermissions.Select(x => x.GrantedUserId).ToList();
     1101              // guarantee that project owner is always permitted
     1102              if (!cpAssignedPermissions.Contains(p.OwnerUserId)) {
     1103                cpAssignedPermissions.Add(p.OwnerUserId);
     1104              }
     1105              var cpRemovedPermissions = cpAssignedPermissions.Where(x => x != p.OwnerUserId).Except(grantedUserIds);
     1106
     1107              // remove left-over job assignments (for non-reassignments)
     1108              if(!reassignCascading) {
     1109                assignedJobResourceDao.DeleteByProjectIdAndUserIds(p.ProjectId, cpRemovedPermissions);
     1110              }
     1111
    10701112              // remove project permissions
    1071               if(reassignCascading) {
     1113              if (reassignCascading) {
    10721114                p.ProjectPermissions.Clear();
    10731115              } else {
    10741116                foreach(var item in p.ProjectPermissions
    1075                   .Where(x => removedPermissions.Contains(x.GrantedUserId))
     1117                  .Where(x => x.GrantedUserId != p.OwnerUserId
     1118                    && (removedPermissions.Contains(x.GrantedUserId) || cpRemovedPermissions.Contains(x.GrantedUserId)))
    10761119                  .ToList()) {
    10771120                  p.ProjectPermissions.Remove(item);
     
    10811124
    10821125              // add project permissions
    1083               foreach (var id in grantedUserIds) {
     1126              var cpGrantedUserIds = new HashSet<Guid>(grantedUserIds);
     1127              cpGrantedUserIds.Add(p.OwnerUserId);
     1128
     1129              foreach (var id in cpGrantedUserIds) {
    10841130                if (p.ProjectPermissions.All(x => x.GrantedUserId != id)) {
    10851131                  p.ProjectPermissions.Add(new DA.ProjectPermission {
     
    11811227          if (cascading) {
    11821228            var childProjects = projectDao.GetChildProjectsById(projectId).ToList();
     1229            var childProjectIds = childProjects.Select(x => x.ProjectId).ToList();
    11831230
    11841231            // remove job assignments
    11851232            if (reassignCascading) {
    1186               assignedJobResourceDao.DeleteByProjectIds(childProjects.Select(x => x.ProjectId).ToList());
     1233              assignedJobResourceDao.DeleteByProjectIds(childProjectIds);
    11871234            } else {
    1188               var childProjectIds = childProjects.Select(x => x.ProjectId).ToList();
    11891235              assignedJobResourceDao.DeleteByProjectIdsAndResourceIds(childProjectIds, removedAssignments);
    11901236            }
    11911237            foreach (var p in childProjects) {
     1238              var cpAssignedResources = p.AssignedProjectResources.Select(x => x.ResourceId).ToArray();
     1239              var cpRemovedAssignments = cpAssignedResources.Except(resourceIds);
     1240
     1241              // remove left-over job assignments (for non-reassignments)
     1242              if(!reassignCascading) {
     1243                assignedJobResourceDao.DeleteByProjectIdAndResourceIds(p.ProjectId, cpRemovedAssignments);
     1244              }
     1245
    11921246              // remove project assignments
    11931247              if (reassignCascading) {
     
    11951249              } else {
    11961250                foreach (var item in p.AssignedProjectResources
    1197                   .Where(x => removedAssignments.Contains(x.ResourceId))
     1251                  .Where(x => removedAssignments.Contains(x.ResourceId) || cpRemovedAssignments.Contains(x.ResourceId))
    11981252                  .ToList()) {
    11991253                  p.AssignedProjectResources.Remove(item);
     
    17801834        if (project != null) {
    17811835          if (project.StartDate > date) throw new ArgumentException("Cannot add job to specified project. The start date of the project is still in the future.");
    1782           else if (project.EndDate < date) throw new ArgumentException("Cannot add job to specified project. The end date of the project is already in the past.");
     1836          else if (project.EndDate != null && project.EndDate < date) throw new ArgumentException("Cannot add job to specified project. The end date of the project is already reached.");
    17831837        } else {
    17841838          throw new ArgumentException("Cannot add job to specified project. The project seems not to be available anymore.");
Note: See TracChangeset for help on using the changeset viewer.