using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Options; namespace Distribution.Infra.Auth { public class PermissionPolicyProvider : IAuthorizationPolicyProvider { private readonly DefaultAuthorizationPolicyProvider _fallback; public PermissionPolicyProvider(IOptions options) { _fallback = new DefaultAuthorizationPolicyProvider(options); } public Task GetDefaultPolicyAsync() => _fallback.GetDefaultPolicyAsync(); public Task GetFallbackPolicyAsync() => _fallback.GetFallbackPolicyAsync(); public Task GetPolicyAsync(string policyName) { if (policyName.Contains('.')) { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(new PermissionRequirement(policyName)) .Build(); return Task.FromResult(policy); } return _fallback.GetPolicyAsync(policyName); } } }