|
|
|
@ -1,10 +1,13 @@
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Security.Claims;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using JetBrains.Annotations;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using Microsoft.Extensions.Options;
|
|
|
|
|
using Volo.Abp.DependencyInjection;
|
|
|
|
|
using Volo.Abp.Security.Claims;
|
|
|
|
|
|
|
|
|
|
namespace Volo.Abp.Authorization.Permissions
|
|
|
|
|
{
|
|
|
|
@ -14,6 +17,8 @@ namespace Volo.Abp.Authorization.Permissions
|
|
|
|
|
|
|
|
|
|
protected IReadOnlyList<IPermissionValueProvider> ValueProviders => _lazyProviders.Value;
|
|
|
|
|
|
|
|
|
|
protected ICurrentPrincipalAccessor PrincipalAccessor { get; }
|
|
|
|
|
|
|
|
|
|
protected PermissionOptions Options { get; }
|
|
|
|
|
|
|
|
|
|
private readonly Lazy<List<IPermissionValueProvider>> _lazyProviders;
|
|
|
|
@ -21,8 +26,10 @@ namespace Volo.Abp.Authorization.Permissions
|
|
|
|
|
public PermissionChecker(
|
|
|
|
|
IOptions<PermissionOptions> options,
|
|
|
|
|
IServiceProvider serviceProvider,
|
|
|
|
|
ICurrentPrincipalAccessor principalAccessor,
|
|
|
|
|
IPermissionDefinitionManager permissionDefinitionManager)
|
|
|
|
|
{
|
|
|
|
|
PrincipalAccessor = principalAccessor;
|
|
|
|
|
PermissionDefinitionManager = permissionDefinitionManager;
|
|
|
|
|
Options = options.Value;
|
|
|
|
|
|
|
|
|
@ -35,25 +42,30 @@ namespace Volo.Abp.Authorization.Permissions
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Task<PermissionGrantInfo> CheckAsync(string name)
|
|
|
|
|
public virtual Task<PermissionGrantInfo> CheckAsync(string name)
|
|
|
|
|
{
|
|
|
|
|
var permission = PermissionDefinitionManager.Get(name);
|
|
|
|
|
|
|
|
|
|
return GetPermissionGrantInfo(permission);
|
|
|
|
|
return CheckAsync(PrincipalAccessor.Principal, name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual async Task<PermissionGrantInfo> GetPermissionGrantInfo(PermissionDefinition permission)
|
|
|
|
|
public virtual async Task<PermissionGrantInfo> CheckAsync(ClaimsPrincipal claimsPrincipal, string name)
|
|
|
|
|
{
|
|
|
|
|
Check.NotNull(name, nameof(name));
|
|
|
|
|
|
|
|
|
|
var context = new PermissionValueCheckContext(
|
|
|
|
|
PermissionDefinitionManager.Get(name),
|
|
|
|
|
claimsPrincipal
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
foreach (var provider in ValueProviders)
|
|
|
|
|
{
|
|
|
|
|
var result = await provider.CheckAsync(permission);
|
|
|
|
|
var result = await provider.CheckAsync(context);
|
|
|
|
|
if (result.IsGranted)
|
|
|
|
|
{
|
|
|
|
|
return new PermissionGrantInfo(permission.Name, true, provider.Name, result.ProviderKey);
|
|
|
|
|
return new PermissionGrantInfo(context.Permission.Name, true, provider.Name, result.ProviderKey);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new PermissionGrantInfo(permission.Name, false);
|
|
|
|
|
return new PermissionGrantInfo(context.Permission.Name, false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|