Как выполнить метод для допустимых значений в авторизации на основе утверждений? - PullRequest
0 голосов
/ 08 ноября 2019

У меня 2 политики: Readers и Writers. Для каждой из этих политик у меня было бы несколько значений, принадлежащих им:

Readers: [1,2,3,4,5,6]
Writers: [100,400,500]

Эти массивы будут храниться в базе данных / извлекаться с помощью вызова Http.

Как я могу вместо этогопроверки требуемого значения претензии по некоторым предопределенным значениям, как здесь:

 services.AddAuthorization(options =>
        {
               options.AddPolicy("Readers", 
                  policy =>policy.RequireClaim("UserID", "1", "2", "3", "4", "5"));
        });

Получите что-то вроде этого:

 CheckPolicyService someService;
 services.AddAuthorization(options =>
            {
                options.AddPolicy("Readers", 
                   policy =>policy.RequireClaim("UserID", async (userId)=>await someService.CheckClaimAsync(new Claim("UserID",userId,),"Readers"));
            });

Как я могу вместо проверки, что EmployerID находится взаданный список значений вместо вызова службы, которая проверяет это?

public class PolicyRepo
{
   public string PolicyID{get;set;}
   public string[] Users{get;set;}
}

public class CheckPolicyService
{
  private PolicyRepo [] repos {get;set;} //all policies with their allowed users
  public async Task<bool> CheckClaimAsync(Claim userClaim,string policy)
  {
      if(userClaim.Type!="UserID")
      {
         return false;
      }
      bool hasAccess=this.repos.Single(r=>r.PolicyId==policy).Users.Contains(userClaim.Value);
      return hasAccess;

  }
}


public class Controller 
{
   [Authorize(Policy="Readers")]
   public async Task ReadAsync()
   {

   }
   [Authorize(Policy="Writers")]
   public async Task WriteAsync()
   {
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...