/// <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); }
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(); } }
/// <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); }