Browse Source

Resolved #3492: Add PreDefine & PostDefine methods for IPermissionDefinitionProvider

pull/3516/head
Halil İbrahim Kalkan 7 years ago
parent
commit
2d28429151
  1. 4
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionDefinitionProvider.cs
  2. 8
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionContext.cs
  3. 26
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionManager.cs
  4. 10
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionProvider.cs

4
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionDefinitionProvider.cs

@ -2,6 +2,10 @@
{ {
public interface IPermissionDefinitionProvider public interface IPermissionDefinitionProvider
{ {
void PreDefine(IPermissionDefinitionContext context);
void Define(IPermissionDefinitionContext context); void Define(IPermissionDefinitionContext context);
void PostDefine(IPermissionDefinitionContext context);
} }
} }

8
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionContext.cs

@ -1,4 +1,5 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using JetBrains.Annotations; using JetBrains.Annotations;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy;
@ -7,10 +8,13 @@ namespace Volo.Abp.Authorization.Permissions
{ {
public class PermissionDefinitionContext : IPermissionDefinitionContext public class PermissionDefinitionContext : IPermissionDefinitionContext
{ {
public IServiceProvider ServiceProvider { get; }
internal Dictionary<string, PermissionGroupDefinition> Groups { get; } internal Dictionary<string, PermissionGroupDefinition> Groups { get; }
internal PermissionDefinitionContext() internal PermissionDefinitionContext(IServiceProvider serviceProvider)
{ {
ServiceProvider = serviceProvider;
Groups = new Dictionary<string, PermissionGroupDefinition>(); Groups = new Dictionary<string, PermissionGroupDefinition>();
} }

26
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionManager.cs

@ -83,7 +83,7 @@ namespace Volo.Abp.Authorization.Permissions
} }
protected virtual void AddPermissionToDictionaryRecursively( protected virtual void AddPermissionToDictionaryRecursively(
Dictionary<string, PermissionDefinition> permissions, Dictionary<string, PermissionDefinition> permissions,
PermissionDefinition permission) PermissionDefinition permission)
{ {
if (permissions.ContainsKey(permission.Name)) if (permissions.ContainsKey(permission.Name))
@ -101,22 +101,32 @@ namespace Volo.Abp.Authorization.Permissions
protected virtual Dictionary<string, PermissionGroupDefinition> CreatePermissionGroupDefinitions() protected virtual Dictionary<string, PermissionGroupDefinition> CreatePermissionGroupDefinitions()
{ {
var context = new PermissionDefinitionContext();
using (var scope = _serviceProvider.CreateScope()) using (var scope = _serviceProvider.CreateScope())
{ {
var context = new PermissionDefinitionContext(scope.ServiceProvider);
var providers = Options var providers = Options
.DefinitionProviders .DefinitionProviders
.Select(p => scope.ServiceProvider.GetRequiredService(p) as IPermissionDefinitionProvider) .Select(p => scope.ServiceProvider.GetRequiredService(p) as IPermissionDefinitionProvider)
.ToList(); .ToList();
foreach (var provider in providers)
{
provider.PreDefine(context);
}
foreach (var provider in providers) foreach (var provider in providers)
{ {
provider.Define(context); provider.Define(context);
} }
}
return context.Groups; foreach (var provider in providers)
{
provider.PostDefine(context);
}
return context.Groups;
}
} }
} }
} }

10
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinitionProvider.cs

@ -4,6 +4,16 @@ namespace Volo.Abp.Authorization.Permissions
{ {
public abstract class PermissionDefinitionProvider : IPermissionDefinitionProvider, ITransientDependency public abstract class PermissionDefinitionProvider : IPermissionDefinitionProvider, ITransientDependency
{ {
public virtual void PreDefine(IPermissionDefinitionContext context)
{
}
public abstract void Define(IPermissionDefinitionContext context); public abstract void Define(IPermissionDefinitionContext context);
public virtual void PostDefine(IPermissionDefinitionContext context)
{
}
} }
} }
Loading…
Cancel
Save