|
|
|
@ -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; |
|
|
|
|