33 lines
1.1 KiB
C#
33 lines
1.1 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
public class PermissionPolicyProvider : IAuthorizationPolicyProvider
|
|
{
|
|
private readonly DefaultAuthorizationPolicyProvider _fallback;
|
|
|
|
public PermissionPolicyProvider(IOptions<AuthorizationOptions> options)
|
|
{
|
|
_fallback = new DefaultAuthorizationPolicyProvider(options);
|
|
}
|
|
|
|
public Task<AuthorizationPolicy?> GetPolicyAsync(string policyName)
|
|
{
|
|
if (policyName.StartsWith("perm:", StringComparison.Ordinal))
|
|
{
|
|
var permission = policyName["perm:".Length..];
|
|
var policy = new AuthorizationPolicyBuilder()
|
|
.RequireAuthenticatedUser()
|
|
.AddRequirements(new PermissionRequirement(permission))
|
|
.Build();
|
|
return Task.FromResult<AuthorizationPolicy?>(policy);
|
|
}
|
|
|
|
return _fallback.GetPolicyAsync(policyName);
|
|
}
|
|
|
|
public Task<AuthorizationPolicy> GetDefaultPolicyAsync() =>
|
|
_fallback.GetDefaultPolicyAsync();
|
|
|
|
public Task<AuthorizationPolicy?> GetFallbackPolicyAsync() =>
|
|
_fallback.GetFallbackPolicyAsync();
|
|
} |