From db03028853cfccdf67ab3c8109360395ce15716e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 8 Jul 2019 15:06:02 +0300 Subject: [PATCH] Introduce IPermissionValueProviderManager, make PermissionChecker transient. --- .../IPermissionValueProviderManager.cs | 9 +++++ .../Permissions/PermissionChecker.cs | 34 ++++--------------- .../Permissions/PermissionValueProvider.cs | 2 +- .../PermissionValueProviderManager.cs | 32 +++++++++++++++++ .../Volo/Abp/Features/FeatureValueProvider.cs | 2 +- 5 files changed, 50 insertions(+), 29 deletions(-) create mode 100644 framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionValueProviderManager.cs create mode 100644 framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProviderManager.cs diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionValueProviderManager.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionValueProviderManager.cs new file mode 100644 index 0000000000..8bf86160ca --- /dev/null +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionValueProviderManager.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Volo.Abp.Authorization.Permissions +{ + public interface IPermissionValueProviderManager + { + IReadOnlyList ValueProviders { get; } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs index 84dfc91053..a87a22fcf5 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs @@ -1,8 +1,4 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using System.Security.Claims; using System.Security.Principal; using System.Threading.Tasks; @@ -12,39 +8,23 @@ using Volo.Abp.Security.Claims; namespace Volo.Abp.Authorization.Permissions { - public class PermissionChecker : IPermissionChecker, ISingletonDependency + public class PermissionChecker : IPermissionChecker, ITransientDependency { protected IPermissionDefinitionManager PermissionDefinitionManager { get; } - - protected IReadOnlyList ValueProviders => _lazyProviders.Value; - protected ICurrentPrincipalAccessor PrincipalAccessor { get; } - protected ICurrentTenant CurrentTenant { get; } - - protected PermissionOptions Options { get; } - - private readonly Lazy> _lazyProviders; + protected IPermissionValueProviderManager PermissionValueProviderManager { get; } public PermissionChecker( - IOptions options, - IServiceProvider serviceProvider, ICurrentPrincipalAccessor principalAccessor, IPermissionDefinitionManager permissionDefinitionManager, - ICurrentTenant currentTenant) + ICurrentTenant currentTenant, + IPermissionValueProviderManager permissionValueProviderManager) { PrincipalAccessor = principalAccessor; PermissionDefinitionManager = permissionDefinitionManager; CurrentTenant = currentTenant; - Options = options.Value; - - _lazyProviders = new Lazy>( - () => Options - .ValueProviders - .Select(c => serviceProvider.GetRequiredService(c) as IPermissionValueProvider) - .ToList(), - true - ); + PermissionValueProviderManager = permissionValueProviderManager; } public virtual Task IsGrantedAsync(string name) @@ -68,7 +48,7 @@ namespace Volo.Abp.Authorization.Permissions var isGranted = false; var context = new PermissionValueCheckContext(permission, claimsPrincipal); - foreach (var provider in ValueProviders) + foreach (var provider in PermissionValueProviderManager.ValueProviders) { if (context.Permission.Providers.Any() && !context.Permission.Providers.Contains(provider.Name)) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProvider.cs index 44d23f718a..d15311b77c 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProvider.cs @@ -3,7 +3,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Authorization.Permissions { - public abstract class PermissionValueProvider : IPermissionValueProvider, ISingletonDependency //TODO: to transient? + public abstract class PermissionValueProvider : IPermissionValueProvider, ITransientDependency { public abstract string Name { get; } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProviderManager.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProviderManager.cs new file mode 100644 index 0000000000..323ccb1c2e --- /dev/null +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProviderManager.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Authorization.Permissions +{ + public class PermissionValueProviderManager : IPermissionValueProviderManager, ISingletonDependency + { + public IReadOnlyList ValueProviders => _lazyProviders.Value; + private readonly Lazy> _lazyProviders; + + protected PermissionOptions Options { get; } + + public PermissionValueProviderManager( + IServiceProvider serviceProvider, + IOptions options) + { + Options = options.Value; + + _lazyProviders = new Lazy>( + () => Options + .ValueProviders + .Select(c => serviceProvider.GetRequiredService(c) as IPermissionValueProvider) + .ToList(), + true + ); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureValueProvider.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureValueProvider.cs index 7ef664e6ce..e30fccceb8 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureValueProvider.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureValueProvider.cs @@ -3,7 +3,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Features { - public abstract class FeatureValueProvider : IFeatureValueProvider, ISingletonDependency //TODO: to transient? + public abstract class FeatureValueProvider : IFeatureValueProvider, ITransientDependency { public abstract string Name { get; }