Exemplo n.º 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);
        }
Exemplo n.º 2
0
        /// <exclude />
        public static void RemoveUserPermissionDefinition(UserToken userToken, EntityToken entityToken)
        {
            if (userToken == null)
            {
                throw new ArgumentNullException("userToken");
            }
            if (entityToken == null)
            {
                throw new ArgumentNullException("entityToken");
            }

            if ((entityToken is NoSecurityEntityToken))
            {
                return;
            }

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

            string serializedEntityToken = EntityTokenSerializer.Serialize(entityToken);

            EntityTokenCacheFacade.ClearCache();

            UserPermissionDefinitionProviderPluginFacade.RemoveUserPermissionDefinition(userToken, serializedEntityToken);
        }
        private void ExpandNextLevel(string userName)
        {
            int levelNumber = _levels.Count - 1;

            if (levelNumber > 1000)
            {
                throw new InvalidOperationException($"The entity token '{_levels[0][0].EntityToken}' has more than 1000 levels of parents, this might be an infinite loop");
            }

            _moreLevelsToExpend = false;

            List <RelationshipGraphNode> nodes = _levels[levelNumber];

            if (nodes.Count > 1000)
            {
                throw new InvalidOperationException($"The entity token '{_levels[0][0].EntityToken}' has more than 1000 nodes at the level {levelNumber}, this might be an infinite loop");
            }


            foreach (RelationshipGraphNode node in nodes)
            {
                if (_searchOption == RelationshipGraphSearchOption.Native || _searchOption == RelationshipGraphSearchOption.Both)
                {
                    IEnumerable <EntityToken> parentEntityTokens;
                    if (!EntityTokenCacheFacade.GetCachedNativeParents(node.EntityToken, out parentEntityTokens, userName))
                    {
                        parentEntityTokens = SecurityAncestorFacade.GetParents(node.EntityToken)?.Evaluate();

                        EntityTokenCacheFacade.AddNativeCache(node.EntityToken, parentEntityTokens);
                    }

                    if (parentEntityTokens != null)
                    {
                        AddNewParentEntityTokens(node, parentEntityTokens, RelationshipGraphNodeType.Entity, levelNumber);
                    }
                }

                if (_searchOption == RelationshipGraphSearchOption.Hooked || _searchOption == RelationshipGraphSearchOption.Both)
                {
                    IEnumerable <EntityToken> parentEntityTokens;

                    if (!EntityTokenCacheFacade.GetCachedHookingParents(node.EntityToken, out parentEntityTokens, userName))
                    {
                        IEnumerable <EntityToken> auxiliaryParentEntityTokens = AuxiliarySecurityAncestorFacade.GetParents(node.EntityToken);
                        IEnumerable <EntityToken> hookingParentEntityTokens   = HookingFacade.GetHookies(node.EntityToken);

                        parentEntityTokens = auxiliaryParentEntityTokens.ConcatOrDefault(hookingParentEntityTokens)?.Evaluate();

                        EntityTokenCacheFacade.AddHookingCache(node.EntityToken, parentEntityTokens);
                    }

                    if (parentEntityTokens != null)
                    {
                        AddNewParentEntityTokens(node, parentEntityTokens, RelationshipGraphNodeType.Hooking, levelNumber);
                    }
                }
            }
        }
Exemplo n.º 4
0
        /// <exclude />
        public static void SetUserGroupPermissionDefinition(UserGroupPermissionDefinition userGroupPermissionDefinition)
        {
            Verify.ArgumentNotNull(userGroupPermissionDefinition, "userGroupPermissionDefinition");

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

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

            Verify.That(UserPermissionDefinitionProviderPluginFacade.CanAlterDefinitions, "The user permission definition provider does not support altering user permission defintions");

            EntityTokenCacheFacade.ClearCache();

            UserGroupPermissionDefinitionProviderPluginFacade.SetUserGroupPermissionDefinition(userGroupPermissionDefinition);
        }