.net core 如何在基于声明的授权中执行允许值的方法?

.net core 如何在基于声明的授权中执行允许值的方法?,.net-core,authorization,claims-based-identity,.net Core,Authorization,Claims Based Identity,我有两项政策:读者和作者。 对于这些政策中的每一项,我都有许多属于它们的价值观: Readers: [1,2,3,4,5,6] Writers: [100,400,500] 这些数组将存储在数据库中/通过Http调用检索 我怎样才能不根据一些预定义值检查所需的索赔值,如: services.AddAuthorization(options => { options.AddPolicy("Readers",

我有两项政策:
读者
作者
。 对于这些政策中的每一项,我都有许多属于它们的价值观:

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()
   {
   }
}
公共类保单回购
{
公共字符串PolicyID{get;set;}
公共字符串[]用户{get;set;}
}
公共类检查策略服务
{
private PolicyRepo[]repos{get;set;}//所有策略及其允许的用户
公共异步任务CheckClaimeSync(Claim userClaim,字符串策略)
{
if(userClaim.Type!=“UserID”)
{
返回false;
}
bool hasAccess=this.repos.Single(r=>r.PolicyId==policy).Users.Contains(userClaim.Value);
返回通道;
}
}
公共类控制器
{
[授权(Policy=“Readers”)]
公共异步任务ReadAsync()
{
}
[授权(Policy=“Writers”)]
公共异步任务WriteAsync()
{
}
}
也许是你可以使用的东西。也许是你可以使用的东西。