Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/20/11 17:04:35 (13 years ago)
Author:
cneumuel
Message:

#1233

  • added methods for granting and revoking hive experiment permissions
  • added unit tests for hive experiment permissions
  • added a status webpage to see how some statistics and current status
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Services.Hive/3.4/HiveService.cs

    r6452 r6457  
    4444    private IAuthorizationManager author {
    4545      get { return ServiceLocator.Instance.AuthorizationManager; }
    46     } 
     46    }
    4747    private ITransactionManager trans {
    4848      get { return ServiceLocator.Instance.TransactionManager; }
     
    212212    public HiveExperiment GetHiveExperiment(Guid id) {
    213213      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    214       return dao.GetHiveExperiments(x =>
    215         x.HiveExperimentId == id
    216         && (x.OwnerUserId == author.UserId || x.HiveExperimentPermissions.Count(hep => hep.Permission != Permission.NotAllowed && hep.GrantedUserId == author.UserId) > 0)
    217       ).FirstOrDefault();
     214      var hiveExperiment = dao.GetHiveExperiments(x =>
     215            x.HiveExperimentId == id
     216            && (x.OwnerUserId == author.UserId || x.HiveExperimentPermissions.Count(hep => hep.Permission != Permission.NotAllowed && hep.GrantedUserId == author.UserId) > 0)
     217          ).FirstOrDefault();
     218      if (hiveExperiment != null) hiveExperiment.Permission = dao.GetPermissionForExperiment(hiveExperiment.Id, author.UserId);
     219      return hiveExperiment;
    218220    }
    219221
    220222    public IEnumerable<HiveExperiment> GetHiveExperiments() {
    221223      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    222       return dao.GetHiveExperiments(x => x.OwnerUserId == author.UserId || x.HiveExperimentPermissions.Count(hep => hep.Permission != Permission.NotAllowed && hep.GrantedUserId == author.UserId) > 0);
     224      var hiveExperiments = dao.GetHiveExperiments(x => x.OwnerUserId == author.UserId || x.HiveExperimentPermissions.Count(hep => hep.Permission != Permission.NotAllowed && hep.GrantedUserId == author.UserId) > 0);
     225      foreach (var he in hiveExperiments)
     226        he.Permission = dao.GetPermissionForExperiment(he.Id, author.UserId);
     227      return hiveExperiments;
    223228    }
    224229
    225230    public IEnumerable<HiveExperiment> GetAllHiveExperiments() {
    226231      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
    227       return dao.GetHiveExperiments(x => true);
     232      var hiveExperiments = dao.GetHiveExperiments(x => true);
     233      foreach (var he in hiveExperiments)
     234        he.Permission = dao.GetPermissionForExperiment(he.Id, author.UserId);
     235      return hiveExperiments;
    228236    }
    229237
     
    249257        HiveExperiment he = dao.GetHiveExperiment(hiveExperimentId);
    250258        dao.DeleteHiveExperiment(hiveExperimentId); // child jobs will be deleted by db-trigger
     259      });
     260    }
     261    #endregion
     262
     263    #region HiveExperimentPermission Methods
     264    public void GrantPermission(Guid hiveExperimentId, Guid grantedUserId, Permission permission) {
     265      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     266      trans.UseTransaction(() => {
     267        HiveExperiment he = dao.GetHiveExperiment(hiveExperimentId);
     268        if (he == null) throw new FaultException<FaultReason>(new FaultReason("Could not find hiveExperiment with id " + hiveExperimentId));
     269        Permission perm = dao.GetPermissionForExperiment(he.Id, author.UserId);
     270        if (perm != Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
     271        dao.SetHiveExperimentPermission(hiveExperimentId, author.UserId, grantedUserId, permission);
     272      });
     273    }
     274
     275    public void RevokePermission(Guid hiveExperimentId, Guid grantedUserId) {
     276      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     277      trans.UseTransaction(() => {
     278        HiveExperiment he = dao.GetHiveExperiment(hiveExperimentId);
     279        if (he == null) throw new FaultException<FaultReason>(new FaultReason("Could not find hiveExperiment with id " + hiveExperimentId));
     280        Permission perm = dao.GetPermissionForExperiment(he.Id, author.UserId);
     281        if (perm != Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
     282        dao.SetHiveExperimentPermission(hiveExperimentId, author.UserId, grantedUserId, Permission.NotAllowed);
    251283      });
    252284    }
     
    461493    #endregion
    462494
     495    #region Downtime Methods
     496    public Guid AddDowntime(Downtime downtime) {
     497      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     498      return trans.UseTransaction(() => dao.AddDowntime(downtime));
     499    }
     500
     501    public void DeleteDowntime(Guid downtimeId) {
     502      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     503      trans.UseTransaction(() => {
     504        dao.DeleteDowntime(downtimeId);
     505      });
     506    }
     507
     508    public void UpdateDowntime(Downtime downtime) {
     509      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     510      trans.UseTransaction(() => {
     511        dao.UpdateDowntime(downtime);
     512      });
     513    }
     514
     515    public IEnumerable<Downtime> GetDowntimesForResource(Guid resourceId) {
     516      authen.AuthenticateForAnyRole(HiveRoles.Administrator);
     517      return trans.UseTransaction(() => dao.GetDowntimes(x => x.ResourceId == resourceId));
     518    }
     519    #endregion
     520
    463521    #region Helper Methods
    464522    private IEnumerable<Job> GetChildJobs(Guid? parentJobId, bool recursive, bool includeParent) {
     
    477535    }
    478536    #endregion
    479 
    480     #region Downtime Methods
    481     public Guid AddDowntime(Downtime downtime) {
    482       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
    483       return trans.UseTransaction(() => dao.AddDowntime(downtime));
    484     }
    485 
    486     public void DeleteDowntime(Guid downtimeId) {
    487       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
    488       trans.UseTransaction(() => {
    489         dao.DeleteDowntime(downtimeId);
    490       });
    491     }
    492 
    493     public void UpdateDowntime(Downtime downtime) {
    494       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
    495       trans.UseTransaction(() => {
    496         dao.UpdateDowntime(downtime);
    497       });
    498     }
    499 
    500     public IEnumerable<Downtime> GetDowntimesForResource(Guid resourceId) {
    501       authen.AuthenticateForAnyRole(HiveRoles.Administrator);
    502       return trans.UseTransaction(() => dao.GetDowntimes(x => x.ResourceId == resourceId));
    503     }
    504     #endregion
    505537  }
    506538}
Note: See TracChangeset for help on using the changeset viewer.