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 options) { FallbackPolicyProvider = new DefaultAuthorizationPolicyProvider(options); } public Task GetDefaultPolicyAsync() => FallbackPolicyProvider.GetDefaultPolicyAsync(); public Task GetFallbackPolicyAsync() => FallbackPolicyProvider.GetFallbackPolicyAsync(); public Task 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); } }