c# - 如何在 AddPolicy 语句中连接条件 RequireClaims 表达式
问题描述
我正在以这种方式配置我的授权方法:
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"));
});
我还尝试连接 RequireClaim 语句。
services.AddAuthorization(options =>
{
options.AddPolicy("Branch",
policy => policy.RequireClaim(ClaimTypes.Role, "Admin")
.RequireClaim(ClaimTypes.Role, "BranchManager"));
});
而且它也不起作用,因为系统期望“Admin”和“BranchManager”声明都被清除。有没有一种优雅的方法来实现这一点:如果至少满足一个要求,则授权?
解决方案
如果您深入研究 Microsoft.AspNetCore.Authorization.AuthorisationPolicyBuilder 的源代码,您将看到该方法的一个版本,如下所示
公共 AuthorizationPolicyBuilder RequireClaim(string claimType, IEnumerable requiredValues);
第二个参数必须是您所追求的值的 IEnumerable。
options.AddPolicy("Branch",
policy => policy.RequireClaim(ClaimTypes.Role, new List<string> {"Admin", "BranchManager" }));
推荐阅读
- json - 如何将单独的 json 对象列表合并到一个对象数组中?
- angularjs - 关闭应用程序时 Ionic Firebase 数据更改
- mysql - 使用python从目录上传所有文件
- android - 在房间持久性库中使任何列自动生成(不是主键)
- arrays - 如何将数组值附加到laravel中的集合中?
- android - 是否还有任何受支持的 Eclipse 应用程序\版本?(用于维护旧项目)
- ios - TrueDepth 相机前景分割,改善遮罩效果
- json - 将 JSON 文件转换为 TFRecord 时出现错误
- ruby-on-rails - 在使用 minimagick 创建的 Ruby 中编辑 PDF 的元数据
- wordpress - 搜索查询的分页格式不正确 WP