Browse Source

Introduce IPermissionValueProviderManager, make PermissionChecker transient.

pull/1460/head
Halil İbrahim Kalkan 7 years ago
parent
commit
db03028853
  1. 9
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionValueProviderManager.cs
  2. 34
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs
  3. 2
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProvider.cs
  4. 32
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProviderManager.cs
  5. 2
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureValueProvider.cs

9
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<IPermissionValueProvider> ValueProviders { get; }
}
}

34
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<IPermissionValueProvider> ValueProviders => _lazyProviders.Value;
protected ICurrentPrincipalAccessor PrincipalAccessor { get; }
protected ICurrentTenant CurrentTenant { get; }
protected PermissionOptions Options { get; }
private readonly Lazy<List<IPermissionValueProvider>> _lazyProviders;
protected IPermissionValueProviderManager PermissionValueProviderManager { get; }
public PermissionChecker(
IOptions<PermissionOptions> 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<List<IPermissionValueProvider>>(
() => Options
.ValueProviders
.Select(c => serviceProvider.GetRequiredService(c) as IPermissionValueProvider)
.ToList(),
true
);
PermissionValueProviderManager = permissionValueProviderManager;
}
public virtual Task<bool> 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))

2
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; }

32
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<IPermissionValueProvider> ValueProviders => _lazyProviders.Value;
private readonly Lazy<List<IPermissionValueProvider>> _lazyProviders;
protected PermissionOptions Options { get; }
public PermissionValueProviderManager(
IServiceProvider serviceProvider,
IOptions<PermissionOptions> options)
{
Options = options.Value;
_lazyProviders = new Lazy<List<IPermissionValueProvider>>(
() => Options
.ValueProviders
.Select(c => serviceProvider.GetRequiredService(c) as IPermissionValueProvider)
.ToList(),
true
);
}
}
}

2
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; }

Loading…
Cancel
Save