/// <summary> /// Filters a collection of permissions to only include permissions for a specific entity type. /// </summary> /// <param name="permissionsToFilter">The collection of permissions to filter</param> /// <param name="entityDefinitionCode">The definition code of the entity to filter on e.g. PageEntityDefinition.DefinitionCode</param> /// <returns>Filtered collection cast to IEnumerable{IEntityPermission}</returns> public virtual IPermissionSetBuilder ApplyRoleConfiguration <TRoleDefinition>(Func <IEnumerable <IPermission>, IEnumerable <IPermission> > additionalFilter = null) where TRoleDefinition : IRoleDefinition { var roleDefinition = _roleDefinitionRepository.GetRequired <TRoleDefinition>(); var guard = _circularDependencyGuard; if (guard != null) { guard.AddRole <TRoleDefinition>(); } else { guard = new CircularDependencyGuard(roleDefinition); } var builder = new PermissionSetBuilder( guard, AvailablePermissions, ServiceProvider, _rolePermissionInitializerFactory, _entityDefinitionRepository, _roleDefinitionRepository ); var permissionInitializer = _rolePermissionInitializerFactory.Create(roleDefinition); permissionInitializer.Initialize(builder); var rolePermissions = builder.Build(); return(Include(permissions => rolePermissions, additionalFilter)); }
private PermissionSetBuilder( CircularDependencyGuard circularDependencyGuard, IEnumerable <IPermission> allPermissions, IServiceProvider serviceProvider, IRolePermissionInitializerFactory rolePermissionInitializerFactory, IEntityDefinitionRepository entityDefinitionRepository, IRoleDefinitionRepository roleDefinitionRepository ) { _circularDependencyGuard = circularDependencyGuard; AvailablePermissions = allPermissions; ServiceProvider = serviceProvider; _rolePermissionInitializerFactory = rolePermissionInitializerFactory; _entityDefinitionRepository = entityDefinitionRepository; _roleDefinitionRepository = roleDefinitionRepository; }