如何编写允许任何一项声明的政策?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (30)

我有以下2个政策。在我的逻辑中,我需要检查这些策略中的任何一个是否适用。

options.AddPolicy("ADD", policy =>
    policy.RequireClaim("Addition", "add"));

options.AddPolicy("SUB", policy =>
    policy.RequireClaim("Substraction", "subs"));

例如,如果存在策略ADDSUB存在,则允许其访问该方法。我怎样才能让它发挥作用?

我试过的方法

我研究了以下方法。我写了一个新的政策,允许两个ADDSUB给它。

options.AddPolicy("ADDSUB", policy =>
    policy.RequireClaim("Addition", "add")
    .RequireClaim("Substraction", "sub"));

应用于以下方法:

[Authorize(Policy = "ADDSUB")]
 [HttpPost]
 public IActionResult PerformCalculation()
 {
 }

但是,这不起作用。我认为这是一个AND操作。我需要的是OR操作,它允许ADD或SUB输入。

提问于
用户回答回答于

你可以使用RequireAssertion策略构建器来执行必要的逻辑,方法是提供一个Func<AuthorizationHandlerContext, bool>

例如:

services.AddAuthorization(options =>
{
    options.AddPolicy("ADDSUB", policy =>
        policy.RequireAssertion(context =>
            context.User.HasClaim(c => c.Type == "Addition" && c.Value == "add") || 
            context.User.HasClaim(c => c.Type == "Substraction" && c.Value == "subs")));
});

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问5 回答
  • uncle_light

    5 粉丝518 提问3 回答
  • 学生

    2 粉丝477 提问3 回答
  • 军哥

    重庆雷驰信息技术有限公司 · 经理 (已认证)

    5 粉丝1 提问3 回答

扫码关注云+社区

领取腾讯云代金券