using System.Threading.Tasks; using gehGassi.Web.Auth.Requirements; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Options; namespace gehGassi.Web.Auth { /// /// Provider der die Überprüfung von Policies mit enums ermöglicht /// public class AuthorizationPolicyProvider : DefaultAuthorizationPolicyProvider { private readonly AuthorizationOptions _options; private readonly IConfiguration _configuration; public AuthorizationPolicyProvider(IOptions options, IConfiguration configuration) : base(options) { _options = options.Value; _configuration = configuration; } public override async Task GetPolicyAsync(string policyName) { var policy = await base.GetPolicyAsync(policyName); if (policy == null) { policy = new AuthorizationPolicyBuilder() .AddRequirements(new PermissionRequirement(policyName)) .Build(); // Add policy to the AuthorizationOptions, so we don't have to re-create it each time _options.AddPolicy(policyName, policy); } return policy; } } }