public IEnumerable <ServerPartitionDataAccess> GetServerPartitionDataAccessGroups(ServerPartition partition) { var broker = HttpContextData.Current.ReadContext.GetBroker <IServerPartitionDataAccessEntityBroker>(); var criteria = new ServerPartitionDataAccessSelectCriteria(); criteria.ServerPartitionKey.EqualTo(partition.Key); return(broker.Find(criteria)); }
public void LoadDataAcessInformation(IPersistenceContext context) { lock (_syncLock) { if (_dataAccessInfoloaded) { return; } IServerPartitionDataAccessEntityBroker broker = context.GetBroker <IServerPartitionDataAccessEntityBroker>(); ServerPartitionDataAccessSelectCriteria criteria = new ServerPartitionDataAccessSelectCriteria(); criteria.ServerPartitionKey.EqualTo(this.Key); _dataAccessGroups = broker.Find(criteria); _dataAccessInfoloaded = true; } }
private void UpdateDataAccess(IUpdateContext ctx, ServerPartition partition, List <string> groupsWithAccess) { var broker = ctx.GetBroker <IServerPartitionDataAccessEntityBroker>(); var criteria = new ServerPartitionDataAccessSelectCriteria(); criteria.ServerPartitionKey.EqualTo(partition.Key); var existingGroups = broker.Find(criteria); if (existingGroups != null) { foreach (var g in existingGroups) { if (!groupsWithAccess.Contains(g.Key.ToString())) { broker.Delete(g.Key); } } } if (groupsWithAccess != null) { foreach (var g in groupsWithAccess) { string g1 = g; if (!CollectionUtils.Contains(existingGroups, group => group.Key.ToString().Equals(g1))) { var dataAccessGroup = AddDataAccessIfNotExists(g); var record = new ServerPartitionDataAccessUpdateColumns { DataAccessGroupKey = dataAccessGroup.Key, ServerPartitionKey = partition.Key }; broker.Insert(record); } } } }
/// <summary> /// Gets a list of authority groups that can access a given partition /// </summary> /// <param name="partitionKey">The partition</param> /// <param name="dataAccessGrupsOnly">True to find data access groups only; False to find all authority groups</param> /// <param name="allStudiesGroup">Returns a list of groups that have access to all studies</param> /// <returns></returns> public IList <AuthorityGroupDetail> GetAuthorityGroupsForPartition(ServerEntityKey partitionKey, bool dataAccessGrupsOnly, out IList <AuthorityGroupDetail> allStudiesGroup) { using (var service = new AuthorityRead()) { IList <AuthorityGroupDetail> groups = dataAccessGrupsOnly ? service.ListDataAccessAuthorityGroupDetails() : service.ListAllAuthorityGroupDetails(); IList <AuthorityGroupDetail> resultGroups = new List <AuthorityGroupDetail>(); var internalAllStudiesGroup = new List <AuthorityGroupDetail>(); CollectionUtils.ForEach( groups, delegate(AuthorityGroupDetail group) { bool allPartitions = false; bool allStudies = false; foreach (var token in group.AuthorityTokens) { if (token.Name.Equals(ClearCanvas.Enterprise.Common.AuthorityTokens.DataAccess.AllPartitions)) { allPartitions = true; } else if (token.Name.Equals(ClearCanvas.Enterprise.Common.AuthorityTokens.DataAccess.AllStudies)) { allStudies = true; } if (allPartitions && allStudies) { break; } } if (allPartitions && allStudies) { internalAllStudiesGroup.Add(group); return; } if (!allPartitions) { using (IReadContext readContext = PersistentStoreRegistry.GetDefaultStore().OpenReadContext()) { var criteria = new ServerPartitionDataAccessSelectCriteria(); criteria.ServerPartitionKey.EqualTo(partitionKey); var dataCriteria = new DataAccessGroupSelectCriteria(); dataCriteria.AuthorityGroupOID.EqualTo(new ServerEntityKey("AuthorityGroupOID", new Guid(group.AuthorityGroupRef.ToString(false, false)))); dataCriteria.ServerPartitionDataAccessRelatedEntityCondition.Exists(criteria); var broker = readContext.GetBroker <IDataAccessGroupEntityBroker>(); if (broker.Count(dataCriteria) == 0) { return; } } } if (allStudies) { internalAllStudiesGroup.Add(group); return; } resultGroups.Add(group); }); allStudiesGroup = internalAllStudiesGroup; return(resultGroups); } }