C# 如何在AddPolicy语句中连接条件Requires表达式
我正在以以下方式配置我的授权方法:C# 如何在AddPolicy语句中连接条件Requires表达式,c#,.net,.net-core,C#,.net,.net Core,我正在以以下方式配置我的授权方法: services.AddAuthorization(options => { options.AddPolicy("Branch", policy => policy.RequireClaim(ClaimTypes.Role, "Admin")); }); 这与我在控制器中的“分支”策略完美配合。 我需要实现的是允许多个索赔要求。在这种情况下,即使只满足其中一个要求,也会进行身份验
services.AddAuthorization(options =>
{
options.AddPolicy("Branch",
policy => policy.RequireClaim(ClaimTypes.Role, "Admin"));
});
这与我在控制器中的“分支”策略完美配合。
我需要实现的是允许多个索赔要求。在这种情况下,即使只满足其中一个要求,也会进行身份验证。
我通过在后面添加BranchManager声明来尝试这种方法。但它不起作用
services.AddAuthorization(options =>
{
options.AddPolicy("Branch",
policy => policy.RequireClaim(ClaimTypes.Role, "Admin"));
options.AddPolicy("Branch",
policy => policy.RequireClaim(ClaimTypes.Role, "BranchManager"));
});
我还尝试连接Requirecall语句
services.AddAuthorization(options =>
{
options.AddPolicy("Branch",
policy => policy.RequireClaim(ClaimTypes.Role, "Admin")
.RequireClaim(ClaimTypes.Role, "BranchManager"));
});
而且它也不起作用,因为系统希望“Admin”和“BranchManager”声明都被清除。是否有一种优雅的方法可以实现这一点:如果至少满足一个要求,则进行授权?如果深入了解Microsoft.AspNetCore.Authorization.authorizationPolicyBuilder的源代码,您将看到该方法的一个版本如下所示 公共授权PolicyBuilder RequiredRecall(字符串claimType,IEnumerable requiredValues) 第二个参数必须是您所追求的值的IEnumerable
options.AddPolicy("Branch",
policy => policy.RequireClaim(ClaimTypes.Role, new List<string> {"Admin", "BranchManager" }));
options.AddPolicy(“分支”,
policy=>policy.requirecarel(ClaimTypes.Role,新列表{“Admin”,“BranchManager”});