为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 AddPolicy 语句中连接条件 RequireClaims 表达式

如何在 AddPolicy 语句中连接条件 RequireClaims 表达式

C#
POPMUISE 2023-09-16 17:38:39
我以这种方式配置我的授权方法:    services.AddAuthorization(options =>    {        options.AddPolicy("Branch",             policy => policy.RequireClaim(ClaimTypes.Role, "Admin"));    });这与我在控制器中的“分支”策略完美配合。我需要实现的是允许多个声明要求..即使只满足其中一个要求,也会进行身份验证。我通过添加 BranchManager Claim 来尝试这种方式。但这不起作用。        services.AddAuthorization(options =>        {            options.AddPolicy("Branch",                 policy => policy.RequireClaim(ClaimTypes.Role, "Admin"));            options.AddPolicy("Branch",                policy => policy.RequireClaim(ClaimTypes.Role, "BranchManager"));        });我还尝试连接 RequireClaim 语句。        services.AddAuthorization(options =>        {            options.AddPolicy("Branch",                 policy => policy.RequireClaim(ClaimTypes.Role, "Admin")                                .RequireClaim(ClaimTypes.Role, "BranchManager"));        });而且它也不起作用,因为系统期望“Admin”和“BranchManager”声明都已声明。有没有一种优雅的方法来实现这一点:如果至少满足一个要求则授权?
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

如果您深入研究 Microsoft.AspNetCore.Authorization.AuthorizationPolicyBuilder 的源代码,您将看到该方法有一个像这样的版本

公共 AuthorizationPolicyBuilder RequireClaim(string ClaimType, IEnumerable requiredValues);

第二个参数必须是您所追求的值的 IEnumerable。

options.AddPolicy("Branch", 
                policy => policy.RequireClaim(ClaimTypes.Role, new List<string> {"Admin", "BranchManager" }));



查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 47 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信