我有以下2条政策。按照我的逻辑,我需要检查以下任一政策是否适用。
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输入。
答案 0 :(得分:1)
请参阅MS文档上的"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")));
});