Ignore:
Timestamp:
01/26/18 08:51:30 (3 years ago)
Author:
jzenisek
Message:

#2839

  • worked on (restricted) accessibility of hive's administration area for non-admin roles
  • adapted HiveClient & HiveAdminClient entity loading (client- & service-side)
File:
1 edited

Legend:

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

    r15644 r15658  
    11291129    public IEnumerable<DT.Slave> GetSlaves() {
    11301130      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    1131       bool isAdministrator = RoleVerifier.IsInRole(HiveRoles.Administrator);
    11321131      var pm = PersistenceManager;
    11331132      using (new PerformanceLogger("GetSlaves")) {
    11341133        var slaveDao = pm.SlaveDao;
    1135         //var projectPermissionDao = pm.ProjectPermissionDao;
     1134        var projectDao = pm.ProjectDao;
     1135        var assignedProjectResourceDao = pm.AssignedProjectResourceDao;
     1136
     1137        // collect user information
    11361138        var currentUserId = UserManager.CurrentUserId;
    1137         return pm.UseTransaction(() => {
    1138             return slaveDao.GetAll().ToList()
    1139               .Where( x => isAdministrator
    1140               || x.OwnerUserId == null
    1141               || x.OwnerUserId == currentUserId)
     1139        var userAndGroupIds = new List<Guid> { currentUserId };
     1140        userAndGroupIds.AddRange(UserManager.GetUserGroupIdsOfUser(currentUserId));
     1141
     1142        return pm.UseTransaction(() => {
     1143          var slaves = slaveDao.GetAll()
     1144            .Select(x => x.ToDto())
     1145            .ToList();
     1146          var grantedProjectIds = projectDao.GetUsageGrantedProjectsForUser(userAndGroupIds)
     1147            .Select(x => x.ProjectId)
     1148            .ToList();
     1149          var grantedResourceIds = assignedProjectResourceDao.GetAllGrantedResourcesByProjectIds(grantedProjectIds)
     1150            .Select(x => x.ResourceId)
     1151            .ToList();
     1152
     1153          return slaves
     1154            .Where(x => grantedResourceIds.Contains(x.Id))
     1155            .ToList();
     1156        });
     1157      }
     1158    }
     1159
     1160    public IEnumerable<DT.SlaveGroup> GetSlaveGroups() {
     1161      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     1162      var pm = PersistenceManager;
     1163      using (new PerformanceLogger("GetSlaveGroups")) {
     1164        var slaveGroupDao = pm.SlaveGroupDao;
     1165        var projectDao = pm.ProjectDao;
     1166        var assignedProjectResourceDao = pm.AssignedProjectResourceDao;
     1167
     1168        // collect user information
     1169        var currentUserId = UserManager.CurrentUserId;
     1170        var userAndGroupIds = new List<Guid> { currentUserId };
     1171        userAndGroupIds.AddRange(UserManager.GetUserGroupIdsOfUser(currentUserId));
     1172
     1173        return pm.UseTransaction(() => {
     1174          var slaveGroups = slaveGroupDao.GetAll()
     1175            .Select(x => x.ToDto())
     1176            .ToList();
     1177          var grantedProjectIds = projectDao.GetUsageGrantedProjectsForUser(userAndGroupIds)
     1178            .Select(x => x.ProjectId)
     1179            .ToList();
     1180          var grantedResourceIds = assignedProjectResourceDao.GetAllGrantedResourcesByProjectIds(grantedProjectIds)
     1181            .Select(x => x.ResourceId)
     1182            .ToList();
     1183
     1184          return slaveGroups
     1185            .Where(x => grantedResourceIds.Contains(x.Id))
     1186            .ToList();
     1187        });
     1188      }
     1189    }
     1190
     1191    public IEnumerable<DT.Slave> GetSlavesForAdministration() {
     1192      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     1193      bool isAdministrator = RoleVerifier.IsInRole(HiveRoles.Administrator);
     1194      var pm = PersistenceManager;
     1195      using (new PerformanceLogger("GetSlavesForAdministration")) {
     1196        var slaveDao = pm.SlaveDao;
     1197        var currentUserId = UserManager.CurrentUserId;
     1198
     1199        if (isAdministrator) {
     1200          return pm.UseTransaction(() => {
     1201            return slaveDao.GetAll()
    11421202              .Select(x => x.ToDto())
    11431203              .ToList();
    1144           //var projectPermissions = projectPermissionDao.GetAll();
    1145           //return slaveDao.GetAll().ToList()
    1146           //  .Where(x => isAdministrator
    1147           //    || x.OwnerUserId == null
    1148           //    || x.OwnerUserId == currentUserId
    1149           //    || UserManager.VerifyUser(currentUserId, projectPermissions
    1150           //        //.Where(y => y.ResourceId == x.ResourceId)
    1151           //        .Select(z => z.GrantedUserId)
    1152           //        .ToList())
    1153           //    )
    1154           //  .Select(x => x.ToDto())
    1155           //  .ToList();
    1156         });
    1157       }
    1158     }
    1159 
    1160     public IEnumerable<DT.SlaveGroup> GetSlaveGroups() {
     1204          });
     1205        } else {
     1206          var slaves = slaveDao.GetAll()
     1207            .Select(x => x.ToDto())
     1208            .ToList();
     1209          var projectDao = pm.ProjectDao;
     1210          var assignedProjectResourceDao = pm.AssignedProjectResourceDao;
     1211          var projects = projectDao.GetAdministrationGrantedProjectsForUser(currentUserId).ToList();
     1212          var resourceIds = assignedProjectResourceDao
     1213            .GetAllGrantedResourcesByProjectIds(projects.Select(x => x.ProjectId).ToList())
     1214            .Select(x => x.ResourceId)
     1215            .ToList();
     1216
     1217          return slaves
     1218            .Where(x => resourceIds.Contains(x.Id))
     1219            .ToList();
     1220        }
     1221      }
     1222    }
     1223
     1224    public IEnumerable<DT.SlaveGroup> GetSlaveGroupsForAdministration() {
    11611225      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    11621226      bool isAdministrator = RoleVerifier.IsInRole(HiveRoles.Administrator);
    11631227      var pm = PersistenceManager;
    1164       using (new PerformanceLogger("GetSlaveGroups")) {
     1228      using (new PerformanceLogger("GetSlaveGroupsForAdministration")) {
    11651229        var slaveGroupDao = pm.SlaveGroupDao;
    1166         var projectPermissionDao = pm.ProjectPermissionDao;
    11671230        var currentUserId = UserManager.CurrentUserId;
    1168         return pm.UseTransaction(() => {
    1169           //var projectPermissions = projectPermissionDao.GetAll();
    1170           return slaveGroupDao.GetAll().ToList()
    1171             .Where(x => isAdministrator
    1172               || x.OwnerUserId == null
    1173               || x.OwnerUserId == currentUserId
    1174               //|| UserManager.VerifyUser(currentUserId, projectPermissions
    1175               //    //.Where(y => y.ResourceId == x.ResourceId)
    1176               //    .Select(z => z.GrantedUserId)
    1177               //    .ToList())
    1178              )
     1231
     1232        if (isAdministrator) {
     1233          return pm.UseTransaction(() => {
     1234            return slaveGroupDao.GetAll()
     1235              .Select(x => x.ToDto())
     1236              .ToList();
     1237          });
     1238        } else {
     1239          var slaveGroups = slaveGroupDao.GetAll()
    11791240            .Select(x => x.ToDto())
    11801241            .ToList();
    1181         });
     1242          var projectDao = pm.ProjectDao;
     1243          var assignedProjectResourceDao = pm.AssignedProjectResourceDao;
     1244          var projects = projectDao.GetAdministrationGrantedProjectsForUser(currentUserId).ToList();
     1245          var resourceIds = assignedProjectResourceDao
     1246            .GetAllGrantedResourcesByProjectIds(projects.Select(x => x.ProjectId).ToList())
     1247            .Select(x => x.ResourceId)
     1248            .ToList();
     1249
     1250          return slaveGroups
     1251            .Where(x => resourceIds.Contains(x.Id))
     1252            .ToList();
     1253        }
    11821254      }
    11831255    }
     
    11851257    public void UpdateSlave(DT.Slave slaveDto) {
    11861258      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     1259      AuthorizationManager.AuthorizeForResourceAdministration(slaveDto.Id);
    11871260      var pm = PersistenceManager;
    11881261      using (new PerformanceLogger("UpdateSlave")) {
     
    12021275    public void UpdateSlaveGroup(DT.SlaveGroup slaveGroupDto) {
    12031276      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     1277      AuthorizationManager.AuthorizeForResourceAdministration(slaveGroupDto.Id);
    12041278      var pm = PersistenceManager;
    12051279      using (new PerformanceLogger("UpdateSlaveGroup")) {
     
    14051479
    14061480      return userGroupTree;
     1481    }
     1482
     1483    public bool CheckAccessToAdminAreaGranted() {
     1484      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     1485      bool isAdministrator = RoleVerifier.IsInRole(HiveRoles.Administrator);
     1486      var pm = PersistenceManager;
     1487      using(new PerformanceLogger("CheckAccessToAdminAreaGranted")) {
     1488        if (isAdministrator) {
     1489          return true;
     1490        } else {
     1491          var projectDao = pm.ProjectDao;
     1492          var currentUserId = UserManager.CurrentUserId;
     1493          return projectDao.GetAdministrationGrantedProjectsForUser(currentUserId).Any();
     1494        }
     1495      }
    14071496    }
    14081497    #endregion
Note: See TracChangeset for help on using the changeset viewer.