Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/21/12 18:02:33 (12 years ago)
Author:
gkronber
Message:

#1847: merged trunk changes r7800:HEAD into gp move operators branch

Location:
branches/GP-MoveOperators
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/GP-MoveOperators

  • branches/GP-MoveOperators/HeuristicLab.Services.Hive/3.3/HiveService.cs

    r7259 r8085  
    4141      get { return ServiceLocator.Instance.HiveDao; }
    4242    }
    43     private IAuthenticationManager authen {
    44       get { return ServiceLocator.Instance.AuthenticationManager; }
     43    private Access.IRoleVerifier authen {
     44      get { return ServiceLocator.Instance.RoleVerifier; }
    4545    }
    4646    private IAuthorizationManager author {
     
    5353      get { return ServiceLocator.Instance.EventManager; }
    5454    }
    55     private IUserManager userManager {
     55    private Access.IUserManager userManager {
    5656      get { return ServiceLocator.Instance.UserManager; }
    5757    }
     
    334334      });
    335335    }
     336
    336337    public IEnumerable<JobPermission> GetJobPermissions(Guid jobId) {
    337338      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     
    352353    public void Hello(Slave slaveInfo) {
    353354      authen.AuthenticateForAnyRole(HiveRoles.Slave);
     355      if (userManager.CurrentUser.UserName != "hiveslave")
     356        slaveInfo.OwnerUserId = userManager.CurrentUserId;
     357
    354358      trans.UseTransaction(() => {
    355359        var slave = dao.GetSlave(slaveInfo.Id);
     
    358362          dao.AddSlave(slaveInfo);
    359363        } else {
    360           var dbSlave = dao.GetSlave(slaveInfo.Id);
    361 
    362           dbSlave.Name = slaveInfo.Name;
    363           dbSlave.Description = slaveInfo.Description;
    364 
    365           dbSlave.Cores = slaveInfo.Cores;
    366           dbSlave.CpuArchitecture = slaveInfo.CpuArchitecture;
    367           dbSlave.CpuSpeed = slaveInfo.CpuSpeed;
    368           dbSlave.FreeCores = slaveInfo.FreeCores;
    369           dbSlave.FreeMemory = slaveInfo.FreeMemory;
    370           dbSlave.Memory = slaveInfo.Memory;
    371           dbSlave.OperatingSystem = slaveInfo.OperatingSystem;
    372 
    373           dbSlave.LastHeartbeat = DateTime.Now;
    374           dbSlave.SlaveState = SlaveState.Idle;
     364          slave.Name = slaveInfo.Name;
     365          slave.Description = slaveInfo.Description;
     366          slave.OwnerUserId = slaveInfo.OwnerUserId;
     367
     368          slave.Cores = slaveInfo.Cores;
     369          slave.CpuArchitecture = slaveInfo.CpuArchitecture;
     370          slave.CpuSpeed = slaveInfo.CpuSpeed;
     371          slave.FreeCores = slaveInfo.FreeCores;
     372          slave.FreeMemory = slaveInfo.FreeMemory;
     373          slave.Memory = slaveInfo.Memory;
     374          slave.OperatingSystem = slaveInfo.OperatingSystem;
     375
     376          slave.LastHeartbeat = DateTime.Now;
     377          slave.SlaveState = SlaveState.Idle;
    375378
    376379          // don't update those properties: dbSlave.IsAllowedToCalculate, dbSlave.ParentResourceId
    377380
    378           dao.UpdateSlave(dbSlave);
     381          dao.UpdateSlave(slave);
    379382        }
    380383      });
     
    460463      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
    461464      dao.DeletePlugin(pluginId);
     465    }
     466    #endregion
     467
     468    #region ResourcePermission Methods
     469    public void GrantResourcePermissions(Guid resourceId, Guid[] grantedUserIds) {
     470      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     471      trans.UseTransaction(() => {
     472        Resource resource = dao.GetResource(resourceId);
     473        if (resource == null) throw new FaultException<FaultReason>(new FaultReason("Could not find resource with id " + resourceId));
     474        if (resource.OwnerUserId != userManager.CurrentUserId && !authen.IsInRole(HiveRoles.Administrator)) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permission for this resource"));
     475        foreach (Guid id in grantedUserIds)
     476          dao.AddResourcePermission(new ResourcePermission { ResourceId = resourceId, GrantedByUserId = userManager.CurrentUserId, GrantedUserId = id });
     477      });
     478    }
     479
     480    public void RevokeResourcePermissions(Guid resourceId, Guid[] grantedUserIds) {
     481      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     482      trans.UseTransaction(() => {
     483        Resource resource = dao.GetResource(resourceId);
     484        if (resource == null) throw new FaultException<FaultReason>(new FaultReason("Could not find resource with id " + resourceId));
     485        if (resource.OwnerUserId != userManager.CurrentUserId && !authen.IsInRole(HiveRoles.Administrator)) throw new FaultException<FaultReason>(new FaultReason("Not allowed to revoke permission for this resource"));
     486        foreach (Guid id in grantedUserIds)
     487          dao.DeleteResourcePermission(resourceId, id);
     488      });
     489    }
     490
     491    public IEnumerable<ResourcePermission> GetResourcePermissions(Guid resourceId) {
     492      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     493      return trans.UseTransaction(() => {
     494        Resource resource = dao.GetResource(resourceId);
     495        if (resource == null) throw new FaultException<FaultReason>(new FaultReason("Could not find resource with id " + resourceId));
     496        return dao.GetResourcePermissions(x => x.ResourceId == resourceId);
     497      });
    462498    }
    463499    #endregion
     
    480516
    481517    public Guid AddSlaveGroup(SlaveGroup slaveGroup) {
    482       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     518      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    483519      return trans.UseTransaction(() => dao.AddSlaveGroup(slaveGroup));
    484520    }
     
    495531
    496532    public IEnumerable<Slave> GetSlaves() {
    497       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
    498       return dao.GetSlaves(x => true);
     533      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     534      return dao.GetSlaves(x => true).Where(x => x.OwnerUserId == null
     535                                         || x.OwnerUserId == userManager.CurrentUserId
     536                                         || userManager.VerifyUser(userManager.CurrentUserId, GetResourcePermissions(x.Id).Select(y => y.GrantedUserId).ToList())
     537                                         || authen.IsInRole(HiveRoles.Administrator)).ToArray();
    499538    }
    500539
    501540    public IEnumerable<SlaveGroup> GetSlaveGroups() {
    502       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
    503       return dao.GetSlaveGroups(x => true);
     541      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     542      return dao.GetSlaveGroups(x => true).Where(x => x.OwnerUserId == null
     543                                              || x.OwnerUserId == userManager.CurrentUserId
     544                                              || userManager.VerifyUser(userManager.CurrentUserId, GetResourcePermissions(x.Id).Select(y => y.GrantedUserId).ToList())
     545                                              || authen.IsInRole(HiveRoles.Administrator)).ToArray();
    504546    }
    505547
    506548    public void UpdateSlave(Slave slave) {
    507       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     549      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    508550      trans.UseTransaction(() => {
    509551        dao.UpdateSlave(slave);
     
    512554
    513555    public void UpdateSlaveGroup(SlaveGroup slaveGroup) {
    514       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     556      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    515557      trans.UseTransaction(() => {
    516558        dao.UpdateSlaveGroup(slaveGroup);
     
    519561
    520562    public void DeleteSlave(Guid slaveId) {
    521       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     563      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     564      author.AuthorizeForResourceAdministration(slaveId);
    522565      trans.UseTransaction(() => {
    523566        dao.DeleteSlave(slaveId);
     
    526569
    527570    public void DeleteSlaveGroup(Guid slaveGroupId) {
    528       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     571      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     572      author.AuthorizeForResourceAdministration(slaveGroupId);
    529573      trans.UseTransaction(() => {
    530574        dao.DeleteSlaveGroup(slaveGroupId);
     
    582626    #region Downtime Methods
    583627    public Guid AddDowntime(Downtime downtime) {
    584       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     628      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     629      author.AuthorizeForResourceAdministration(downtime.ResourceId);
    585630      return trans.UseTransaction(() => dao.AddDowntime(downtime));
    586631    }
    587632
    588633    public void DeleteDowntime(Guid downtimeId) {
    589       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     634      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     635      // TODO: pass resource id
     636      // author.AuthorizeForResource(resourceId);
    590637      trans.UseTransaction(() => {
    591638        dao.DeleteDowntime(downtimeId);
     
    594641
    595642    public void UpdateDowntime(Downtime downtime) {
    596       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     643      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     644      author.AuthorizeForResourceAdministration(downtime.ResourceId);
    597645      trans.UseTransaction(() => {
    598646        dao.UpdateDowntime(downtime);
     
    601649
    602650    public IEnumerable<Downtime> GetDowntimesForResource(Guid resourceId) {
    603       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     651      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    604652      return trans.UseTransaction(() => dao.GetDowntimes(x => x.ResourceId == resourceId));
    605653    }
Note: See TracChangeset for help on using the changeset viewer.