我有以下两项政策。在我的逻辑中,我需要检查这两个策略中的任何一个是否适用。
options.AddPolicy("ADD", policy =>
policy.RequireClaim("Addition", "add"));
options.AddPolicy("SUB", policy =>
policy.RequireClaim("Substraction", "subs"));
例如,如果存在策略ADD
或SUB
,则允许其访问该方法。我怎么才能让它工作呢?
我尝试过的方法
我研究了以下方法。我写了一个新的策略,允许ADD
或SUB
访问它。
options.AddPolicy("ADDSUB", policy =>
policy.RequireClaim("Addition", "add")
.RequireClaim("Substraction", "sub"));
应用于该方法,如下所示:
[Authorize(Policy = "ADDSUB")]
[HttpPost]
public IActionResult PerformCalculation()
{
}
然而,这并不起作用。我认为这是一种AND运算。我需要的是一个OR操作,它允许ADD或SUB输入。
发布于 2018-07-23 01:35:02
请参阅MS Docs上的"Using a func to fulfill a policy"。您可以使用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")));
});
https://stackoverflow.com/questions/51467610
复制相似问题