33 lines
1.2 KiB
C#
33 lines
1.2 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.Extensions.Options;
|
|
|
|
namespace LCU.API.Internal.Operations.IncentiveApi.Authorization;
|
|
|
|
public class PermissionPolicyProvider : IAuthorizationPolicyProvider
|
|
{
|
|
const string POLICY_PREFIX = "Permission";
|
|
public DefaultAuthorizationPolicyProvider FallbackPolicyProvider { get; }
|
|
|
|
public PermissionPolicyProvider(IOptions<AuthorizationOptions> options)
|
|
{
|
|
FallbackPolicyProvider = new DefaultAuthorizationPolicyProvider(options);
|
|
}
|
|
|
|
public Task<AuthorizationPolicy> GetDefaultPolicyAsync() => FallbackPolicyProvider.GetDefaultPolicyAsync();
|
|
|
|
public Task<AuthorizationPolicy> GetFallbackPolicyAsync() => FallbackPolicyProvider.GetFallbackPolicyAsync();
|
|
|
|
public Task<AuthorizationPolicy> GetPolicyAsync(string policyName)
|
|
{
|
|
if (policyName.StartsWith(POLICY_PREFIX, StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
var allowedPermissions = policyName.Substring(POLICY_PREFIX.Length);
|
|
var policy = new AuthorizationPolicyBuilder();
|
|
policy.AddRequirements(new PermissionRequirement(allowedPermissions));
|
|
return Task.FromResult(policy.Build());
|
|
}
|
|
|
|
return FallbackPolicyProvider.GetPolicyAsync(policyName);
|
|
}
|
|
}
|