Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/08/15 15:51:32 (9 years ago)
Author:
dglaser
Message:

#2388:

HeuristicLab.Services.Access:
HeuristicLab.Services.Access.DataAccess:

  • Changed connection strings and certificates for local usage

HeuristicLab.Services.Hive.DataAccess:

  • Added compiled queries for frequently used queries
  • Integrated string queries from OptimizedHiveDao

HeuristicLab.Services.Hive:

  • Added NewHeartbeatManager.cs
  • Added NewRoundRobinTaskScheduler.cs
  • Added PerformanceLogger
  • Updated AuthoriziationManager
  • Updated NewHiveService
    • Added Regions
    • Implemented missing methods
    • Improved performance of several queries

HeuristicLab.Services.WebApp.Status:

  • Fixed a bug which caused an error when calculating the average waiting time.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HiveStatistics/sources/HeuristicLab.Services.Hive/3.3/Manager/AuthorizationManager.cs

    r12012 r12691  
    2222using System;
    2323using System.Security;
     24using HeuristicLab.Services.Access;
    2425using HeuristicLab.Services.Hive.DataAccess;
     26using HeuristicLab.Services.Hive.DataAccess.Interfaces;
     27using DA = HeuristicLab.Services.Hive.DataAccess;
    2528using DT = HeuristicLab.Services.Hive.DataTransfer;
    2629
     
    2831namespace HeuristicLab.Services.Hive {
    2932  public class AuthorizationManager : IAuthorizationManager {
     33
     34    private const string NOT_AUTHORIZED = "Current user is not authorized to access the requested resource";
     35    private IPersistenceManager PersistenceManager {
     36      get { return ServiceLocator.Instance.PersistenceManager; }
     37    }
     38
     39    private IUserManager UserManager {
     40      get { return ServiceLocator.Instance.UserManager; }
     41    }
     42
     43    private IRoleVerifier RoleVerifier {
     44      get { return ServiceLocator.Instance.RoleVerifier; }
     45    }
     46
    3047    public void Authorize(Guid userId) {
    3148      if (userId != ServiceLocator.Instance.UserManager.CurrentUserId)
    32         throw new SecurityException("Current user is not authorized to access object");
     49        throw new SecurityException(NOT_AUTHORIZED);
    3350    }
    3451
    3552    public void AuthorizeForTask(Guid taskId, DT.Permission requiredPermission) {
    3653      if (ServiceLocator.Instance.RoleVerifier.IsInRole(HiveRoles.Slave)) return; // slave-users can access all tasks
    37 
    38       Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForTask(taskId, ServiceLocator.Instance.UserManager.CurrentUserId);
    39       if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
    40         throw new SecurityException("Current user is not authorized to access task");
     54      using (var pm = PersistenceManager) {
     55        var taskDao = pm.TaskDao;
     56        pm.UseTransaction(() => {
     57          var task = taskDao.GetById(taskId);
     58          if (task == null) throw new SecurityException(NOT_AUTHORIZED);
     59          AuthorizeJob(pm, task.JobId, requiredPermission);
     60        });
     61      }
    4162    }
    4263
    4364    public void AuthorizeForJob(Guid jobId, DT.Permission requiredPermission) {
    44       Permission permission = ServiceLocator.Instance.HiveDao.GetPermissionForJob(jobId, ServiceLocator.Instance.UserManager.CurrentUserId);
    45       if (permission == Permission.NotAllowed || (permission != DT.Convert.ToEntity(requiredPermission) && DT.Convert.ToEntity(requiredPermission) == Permission.Full))
    46         throw new SecurityException("Current user is not authorized to access task");
     65      using (var pm = PersistenceManager) {
     66        pm.UseTransaction(() => {
     67          AuthorizeJob(pm, jobId, requiredPermission);
     68        });
     69      }
    4770    }
    4871
    4972    public void AuthorizeForResourceAdministration(Guid resourceId) {
    50       Resource resource = DT.Convert.ToEntity(ServiceLocator.Instance.HiveDao.GetResource(resourceId));
    51       if (resource.OwnerUserId != ServiceLocator.Instance.UserManager.CurrentUserId && !ServiceLocator.Instance.RoleVerifier.IsInRole(HiveRoles.Administrator))
    52         throw new SecurityException("Current user is not authorized to access resource");
     73      using (var pm = PersistenceManager) {
     74        var resourceDao = pm.ResourceDao;
     75        pm.UseTransaction(() => {
     76          var resource = resourceDao.GetById(resourceId);
     77          if (resource == null) throw new SecurityException(NOT_AUTHORIZED);
     78          if (resource.OwnerUserId != UserManager.CurrentUserId
     79              && !RoleVerifier.IsInRole(HiveRoles.Administrator)) {
     80            throw new SecurityException(NOT_AUTHORIZED);
     81          }
     82        });
     83      }
     84    }
     85
     86    private DA.Permission GetPermissionForJob(IPersistenceManager pm, Guid jobId, Guid userId) {
     87      var jobDao = pm.JobDao;
     88      var jobPermissionDao = pm.JobPermissionDao;
     89      var job = jobDao.GetById(jobId);
     90      if (job == null) return DA.Permission.NotAllowed;
     91      if (job.OwnerUserId == userId) return DA.Permission.Full;
     92      var jobPermission = jobPermissionDao.GetByJobAndUserId(jobId, userId);
     93      if (jobPermission == null) return DA.Permission.NotAllowed;
     94      return jobPermission.Permission;
     95    }
     96
     97    private void AuthorizeJob(IPersistenceManager pm, Guid jobId, DT.Permission requiredPermission) {
     98      var requiredPermissionEntity = requiredPermission.ToEntity();
     99      DA.Permission permission = GetPermissionForJob(pm, jobId, UserManager.CurrentUserId);
     100      if (permission == Permission.NotAllowed
     101          || ((permission != requiredPermissionEntity) && requiredPermissionEntity == Permission.Full)) {
     102        throw new SecurityException(NOT_AUTHORIZED);
     103      }
    53104    }
    54105  }
Note: See TracChangeset for help on using the changeset viewer.