Пример #1
0
        /// <exclude />
        public static void SetUserPermissionDefinition(UserPermissionDefinition userPermissionDefinition)
        {
            if (userPermissionDefinition == null)
            {
                throw new ArgumentNullException("userPermissionDefinition");
            }

            if (userPermissionDefinition.EntityToken is NoSecurityEntityToken)
            {
                return;
            }

            if (userPermissionDefinition.PermissionTypes.Contains(PermissionType.ClearPermissions) &&
                userPermissionDefinition.PermissionTypes.Count() > 1)
            {
                throw new ArgumentException(string.Format("The permission type '{0}' may not be used with other permission types", PermissionType.ClearPermissions));
            }

            if (!UserPermissionDefinitionProviderPluginFacade.CanAlterDefinitions)
            {
                throw new InvalidOperationException("The user permission definition provider does not support altering user permission defintions");
            }

            EntityTokenCacheFacade.ClearCache();

            UserPermissionDefinitionProviderPluginFacade.SetUserPermissionDefinition(userPermissionDefinition);
        }
Пример #2
0
        private static IReadOnlyCollection <PermissionType> RecursiveUpdateCurrentUserPermissionTypes(UserToken userToken, EntityToken entityToken, IEnumerable <UserPermissionDefinition> userPermissionDefinitions, HashSet <EntityTokenPair> alreadyProcessedTokens)
        {
            IReadOnlyCollection <PermissionType> cached = PermissionTypeFacadeCaching.GetUserPermissionTypes(userToken, entityToken);

            if (cached != null)
            {
                return(cached);
            }

            UserPermissionDefinition userPermissionDefinition = userPermissionDefinitions
                                                                .Where(f => entityToken.EqualsWithVersionIgnore(f.EntityToken)).SingleOrDefaultOrException("More then one UserPermissionDefinition for the same entity token");

            var thisPermisstionTypes = new List <PermissionType>();

            if (userPermissionDefinition != null)
            {
                thisPermisstionTypes.AddRange(userPermissionDefinition.PermissionTypes);
            }


            if (thisPermisstionTypes.Count > 0)
            {
                thisPermisstionTypes = thisPermisstionTypes.Distinct().ToList();

                if (thisPermisstionTypes.Contains(PermissionType.ClearPermissions))
                {
                    thisPermisstionTypes = new List <PermissionType>();
                }

                PermissionTypeFacadeCaching.SetUserPermissionTypes(userToken, entityToken, thisPermisstionTypes);

                // Local defined permission overrules all other permissions
                return(thisPermisstionTypes);
            }

            // Call resursively on all parents
            List <EntityToken> parentEntityTokens = ParentsFacade.GetAllParents(entityToken);

            IEnumerable <PermissionType> parentsPermisstionTypes = new List <PermissionType>();

            foreach (EntityToken parentEntityToken in parentEntityTokens)
            {
                EntityTokenPair pair = new EntityTokenPair(entityToken, parentEntityToken);
                if (alreadyProcessedTokens.Contains(pair) == false)
                {
                    alreadyProcessedTokens.Add(pair);

                    IEnumerable <PermissionType> thisParentPermisstionTypes = RecursiveUpdateCurrentUserPermissionTypes(userToken, parentEntityToken, userPermissionDefinitions, alreadyProcessedTokens);

                    parentsPermisstionTypes = parentsPermisstionTypes.Concat(thisParentPermisstionTypes);
                }
            }

            List <PermissionType> permisstionTypes = parentsPermisstionTypes.Distinct().ToList();

            PermissionTypeFacadeCaching.SetUserPermissionTypes(userToken, entityToken, permisstionTypes);

            return(permisstionTypes);
        }
        public void SetUserPermissionDefinition(UserPermissionDefinition userPermissionDefinition)
        {
            string username = userPermissionDefinition.Username;
            string serializedEntityToken = userPermissionDefinition.SerializedEntityToken;

            using (TransactionScope transactionScope = TransactionsFacade.CreateNewScope())
            {
                IEnumerable<IUserPermissionDefinition> existingUserPermissionDefinitions = 
                    DataFacade.GetData<IUserPermissionDefinition>()
                              .Where(d => d.Username == username)
                              .ToList()
                              .Where(d => userPermissionDefinition.EntityToken.Equals(DeserializeSilent(d.SerializedEntityToken)))
                              .ToList();

                DataFacade.Delete(existingUserPermissionDefinitions);

                IUserPermissionDefinition definition = DataFacade.BuildNew<IUserPermissionDefinition>();
                definition.Id = Guid.NewGuid();
                definition.Username = userPermissionDefinition.Username;
                definition.SerializedEntityToken = serializedEntityToken;

                DataFacade.AddNew(definition);


                foreach (PermissionType permissionType in userPermissionDefinition.PermissionTypes)
                {
                    IUserPermissionDefinitionPermissionType permission = DataFacade.BuildNew<IUserPermissionDefinitionPermissionType>();
                    permission.Id = Guid.NewGuid();
                    permission.PermissionTypeName = permissionType.ToString();
                    permission.UserPermissionDefinitionId = definition.Id;

                    DataFacade.AddNew(permission);
                }

                transactionScope.Complete();
            }
        }
Пример #4
0
        /// <exclude />
        public static void SetUserPermissionDefinition(UserPermissionDefinition userPermissionDefinition)
        {
            if (userPermissionDefinition == null) throw new ArgumentNullException("userPermissionDefinition");

            if (userPermissionDefinition.EntityToken is NoSecurityEntityToken) return;

            if (userPermissionDefinition.PermissionTypes.Contains(PermissionType.ClearPermissions) &&
                userPermissionDefinition.PermissionTypes.Count() > 1)
            {
                throw new ArgumentException(string.Format("The permission type '{0}' may not be used with other permission types", PermissionType.ClearPermissions));
            }

            if (!UserPermissionDefinitionProviderPluginFacade.CanAlterDefinitions) throw new InvalidOperationException("The user permission definition provider does not support altering user permission defintions");

            EntityTokenCacheFacade.ClearCache();

            UserPermissionDefinitionProviderPluginFacade.SetUserPermissionDefinition(userPermissionDefinition);
        }