AuthorizationPolicyProvider.cs 1.1 KB

1234567891011121314151617181920212223242526272829
  1. // Copyright (c) 2018 Inventory Innovations, Inc.
  2. using Microsoft.AspNetCore.Authorization;
  3. using Microsoft.Extensions.Options;
  4. namespace Hotline.Permissions
  5. {
  6. //thanks to https://www.jerriepelser.com/blog/creating-dynamic-authorization-policies-aspnet-core/
  7. //And to GholamReza Rabbal see https://github.com/JonPSmith/PermissionAccessControl/issues/3
  8. public class AuthorizationPolicyProvider : DefaultAuthorizationPolicyProvider
  9. {
  10. private readonly AuthorizationOptions _options;
  11. public AuthorizationPolicyProvider(IOptions<AuthorizationOptions> options) : base(options)
  12. {
  13. _options = options.Value;
  14. }
  15. public override async Task<AuthorizationPolicy> GetPolicyAsync(string policyName)
  16. {
  17. //Unit tested shows this is quicker (and safer - see link to issue above) than the original version
  18. return await base.GetPolicyAsync(policyName)
  19. ?? new AuthorizationPolicyBuilder()
  20. .AddRequirements(new PermissionRequirement(policyName))
  21. .Build();
  22. }
  23. }
  24. }