Esempio n. 1
0
        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;
            }
        }
Esempio n. 3
0
        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);
                    }
                }
            }
        }
Esempio n. 4
0
        /// <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);
            }
        }