Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/03/18 15:06:21 (6 years ago)
Author:
jzenisek
Message:

#2839:

  • adapted job execution implementation at ProjectJobsView
  • prohibited resource checking for non-admins
Location:
trunk/HeuristicLab.Services.Hive/3.3
Files:
2 edited

Legend:

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

    r16208 r16209  
    483483          }
    484484
    485 
    486485          jobDto.CopyToEntity(job);
    487486
     
    523522
    524523      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    525       bool isAdministrator = RoleVerifier.IsInRole(HiveRoles.Administrator);
    526       var currentUserId = UserManager.CurrentUserId;
     524      // check if user is an admin, or granted to administer a job-parenting project, or job owner
     525      AuthorizationManager.AuthorizeForJob(jobId, DT.Permission.Full);
    527526
    528527      var pm = PersistenceManager;
    529528      using (new PerformanceLogger("UpdateJobState")) {
    530         var jobDao = pm.JobDao;
    531         var projectDao = pm.ProjectDao;
     529        var jobDao = pm.JobDao;       
    532530        pm.UseTransaction(() => {
    533531          var job = jobDao.GetById(jobId);
    534           if (job != null) {
    535 
    536             var administrationGrantedProjects = projectDao
    537               .GetAdministrationGrantedProjectsForUser(currentUserId)
    538               .ToList();
    539 
    540             // check if user is an admin, or granted to administer a job-parenting project,...
    541             if (!isAdministrator && !administrationGrantedProjects.Contains(job.Project))
    542               AuthorizationManager.AuthorizeForJob(jobId, DT.Permission.Full); // ... or job owner
     532          if (job != null) {           
    543533
    544534            // note: allow solely state changes from "Online" to "StatisticsPending" = deletion request by user for HiveStatisticGenerator           
     
    563553
    564554      RoleVerifier.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    565       bool isAdministrator = RoleVerifier.IsInRole(HiveRoles.Administrator);
    566       var currentUserId = UserManager.CurrentUserId;
     555      // check if user is an admin, or granted to administer a job-parenting project, or job owner
     556      foreach (var jobId in jobIds)
     557          AuthorizationManager.AuthorizeForJob(jobId, DT.Permission.Full);
    567558
    568559      var pm = PersistenceManager;
     
    571562        var projectDao = pm.ProjectDao;
    572563        pm.UseTransaction(() => {
    573           var administrationGrantedProjects = projectDao
    574             .GetAdministrationGrantedProjectsForUser(currentUserId)
    575             .ToList();
    576 
    577564          foreach (var jobId in jobIds) {
    578565            var job = jobDao.GetById(jobId);
    579566            if (job != null) {
    580 
    581               // check if user is an admin, or granted to administer a job-parenting project,...
    582               if (!isAdministrator && !administrationGrantedProjects.Contains(job.Project))
    583                 AuthorizationManager.AuthorizeForJob(jobId, DT.Permission.Full); // ... or job owner
    584567
    585568              // note: allow solely state changes from "Online" to "StatisticsPending" = deletion request by user for HiveStatisticGenerator
  • trunk/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs

    r16117 r16209  
    3838    private const string NOT_AUTHORIZED_PROJECTRESOURCE = "Selected project is not authorized to access the requested resource";
    3939    private const string USER_NOT_IDENTIFIED = "User could not be identified";
     40    private const string JOB_NOT_EXISTENT = "Queried job could not be found";
    4041    private const string TASK_NOT_EXISTENT = "Queried task could not be found";
    4142    private const string PROJECT_NOT_EXISTENT = "Queried project could not be found";
     
    6061    public void AuthorizeForTask(Guid taskId, DT.Permission requiredPermission) {
    6162      if (ServiceLocator.Instance.RoleVerifier.IsInRole(HiveRoles.Slave)) return; // slave-users can access all tasks
     63      if (ServiceLocator.Instance.RoleVerifier.IsInRole(HiveRoles.Administrator)) return; // administrator can access all tasks
     64      var currentUserId = UserManager.CurrentUserId;
    6265      var pm = PersistenceManager;
    6366      var taskDao = pm.TaskDao;
     67      var projectDao = pm.ProjectDao;
    6468      pm.UseTransaction(() => {
    6569        var task = taskDao.GetById(taskId);
    6670        if (task == null) throw new SecurityException(TASK_NOT_EXISTENT);
     71
     72        // check if user is granted to administer a job-parenting project
     73        var administrationGrantedProjects = projectDao
     74          .GetAdministrationGrantedProjectsForUser(currentUserId)
     75          .ToList();
     76        if (administrationGrantedProjects.Contains(task.Job.Project)) return;
     77
    6778        AuthorizeJob(pm, task.JobId, requiredPermission);
    6879      });
     
    7081
    7182    public void AuthorizeForJob(Guid jobId, DT.Permission requiredPermission) {
    72       var pm = PersistenceManager;
    73       pm.UseTransaction(() => {
     83      if (ServiceLocator.Instance.RoleVerifier.IsInRole(HiveRoles.Administrator)) return; // administrator can access all jobs
     84      var currentUserId = UserManager.CurrentUserId;
     85      var pm = PersistenceManager;
     86      var jobDao = pm.JobDao;
     87      var projectDao = pm.ProjectDao;
     88      pm.UseTransaction(() => {
     89        var job = jobDao.GetById(jobId);
     90        if(job == null) throw new SecurityException(JOB_NOT_EXISTENT);
     91
     92        // check if user is granted to administer a job-parenting project
     93        var administrationGrantedProjects = projectDao
     94          .GetAdministrationGrantedProjectsForUser(currentUserId)
     95          .ToList();
     96        if (administrationGrantedProjects.Contains(job.Project)) return;
     97
    7498        AuthorizeJob(pm, jobId, requiredPermission);
    7599      });
Note: See TracChangeset for help on using the changeset viewer.