40 lines
1.3 KiB
C#
40 lines
1.3 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Provider der die Überprüfung von Policies mit enums ermöglicht
|
|
/// </summary>
|
|
public class AuthorizationPolicyProvider : DefaultAuthorizationPolicyProvider
|
|
{
|
|
private readonly AuthorizationOptions _options;
|
|
private readonly IConfiguration _configuration;
|
|
|
|
public AuthorizationPolicyProvider(IOptions<AuthorizationOptions> options, IConfiguration configuration) : base(options)
|
|
{
|
|
_options = options.Value;
|
|
_configuration = configuration;
|
|
}
|
|
|
|
public override async Task<AuthorizationPolicy> 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;
|
|
}
|
|
}
|
|
}
|