Refactor permissions

pull/859/head
Halil ibrahim Kalkan 7 years ago
parent a1dcd4f974
commit 5d1b179383

@ -1,8 +1,6 @@
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Authorization.Permissions
namespace Volo.Abp.Authorization.Permissions
{
public interface IPermissionDefinitionProvider : ISingletonDependency
public interface IPermissionDefinitionProvider
{
void Define(IPermissionDefinitionContext context);
}

@ -1,9 +1,8 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Authorization.Permissions
{
public interface IPermissionValueProvider : ISingletonDependency
public interface IPermissionValueProvider
{
string Name { get; }

@ -10,9 +10,6 @@ namespace Volo.Abp.Authorization.Permissions
{
public class PermissionDefinitionManager : IPermissionDefinitionManager, ISingletonDependency
{
protected List<IPermissionDefinitionProvider> Providers => _lazyProviders.Value;
private readonly Lazy<List<IPermissionDefinitionProvider>> _lazyProviders;
protected IDictionary<string, PermissionGroupDefinition> PermissionGroupDefinitions => _lazyPermissionGroupDefinitions.Value;
private readonly Lazy<Dictionary<string, PermissionGroupDefinition>> _lazyPermissionGroupDefinitions;
@ -30,9 +27,15 @@ namespace Volo.Abp.Authorization.Permissions
_serviceProvider = serviceProvider;
Options = options.Value;
_lazyProviders = new Lazy<List<IPermissionDefinitionProvider>>(CreatePermissionProviders, true);
_lazyPermissionDefinitions = new Lazy<Dictionary<string, PermissionDefinition>>(CreatePermissionDefinitions, true);
_lazyPermissionGroupDefinitions = new Lazy<Dictionary<string, PermissionGroupDefinition>>(CreatePermissionGroupDefinitions, true);
_lazyPermissionDefinitions = new Lazy<Dictionary<string, PermissionDefinition>>(
CreatePermissionDefinitions,
isThreadSafe: true
);
_lazyPermissionGroupDefinitions = new Lazy<Dictionary<string, PermissionGroupDefinition>>(
CreatePermissionGroupDefinitions,
isThreadSafe: true
);
}
public virtual PermissionDefinition Get(string name)
@ -64,14 +67,6 @@ namespace Volo.Abp.Authorization.Permissions
return PermissionGroupDefinitions.Values.ToImmutableList();
}
protected virtual List<IPermissionDefinitionProvider> CreatePermissionProviders()
{
return Options
.DefinitionProviders
.Select(p => _serviceProvider.GetRequiredService(p) as IPermissionDefinitionProvider)
.ToList();
}
protected virtual Dictionary<string, PermissionDefinition> CreatePermissionDefinitions()
{
var permissions = new Dictionary<string, PermissionDefinition>();
@ -87,7 +82,9 @@ namespace Volo.Abp.Authorization.Permissions
return permissions;
}
protected virtual void AddPermissionToDictionaryRecursively(Dictionary<string, PermissionDefinition> permissions, PermissionDefinition permission)
protected virtual void AddPermissionToDictionaryRecursively(
Dictionary<string, PermissionDefinition> permissions,
PermissionDefinition permission)
{
if (permissions.ContainsKey(permission.Name))
{
@ -106,9 +103,17 @@ namespace Volo.Abp.Authorization.Permissions
{
var context = new PermissionDefinitionContext();
foreach (var provider in Providers)
using (var scope = _serviceProvider.CreateScope())
{
provider.Define(context);
var providers = Options
.DefinitionProviders
.Select(p => scope.ServiceProvider.GetRequiredService(p) as IPermissionDefinitionProvider)
.ToList();
foreach (var provider in providers)
{
provider.Define(context);
}
}
return context.Groups;

@ -1,6 +1,8 @@
namespace Volo.Abp.Authorization.Permissions
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Authorization.Permissions
{
public abstract class PermissionDefinitionProvider : IPermissionDefinitionProvider
public abstract class PermissionDefinitionProvider : IPermissionDefinitionProvider, ITransientDependency
{
public abstract void Define(IPermissionDefinitionContext context);
}

@ -1,8 +1,9 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Authorization.Permissions
{
public abstract class PermissionValueProvider : IPermissionValueProvider
public abstract class PermissionValueProvider : IPermissionValueProvider, ISingletonDependency
{
public abstract string Name { get; }

Loading…
Cancel
Save