c# - 创建不检查管理员角色声明的策略
问题描述
我想在 ASP.NET Core 3.1 中构建基于权限的授权。我在我的中实施了策略,Startup.cs
但我也不想对所有策略使用自定义需求处理程序。因为我的条件很简单。例如,如果用户具有角色Admin
,则不要检查和授权,如果用户具有User
角色,则检查 Startup.cs 中的关系声明以获取策略。
我在 Startup.cs 实现如下:
services.AddAuthorization(options =>
{
options.AddPolicy("GetDefinition",
policy => policy.RequireRole("Admin", "User")
.RequireClaim("CanGetDefinition"));
});
如果用户在策略创建中具有管理员角色,我如何跳过检查声明?
解决方案
也许基于using-a-func-to-fulfill-a-policy 的东西:
services.AddAuthorization(options =>
{
options.AddPolicy("GetDefinition",
policy => policy.RequireAssertion(
(context) => {
return context.User.IsInRole("Admin") ||
(
context.User.IsInRole("User") &&
context.User.HasClaim(p => p.Type == "CanGetDefinition")
);
}
});
推荐阅读
- node.js - 沙盒绕过导致任意代码执行 - Jade 已重命名为 pug
- javascript - 无法将超过 3 个 BLE 设备连接到 Web 应用程序
- java - 键盘移动文本希望通过 android 中的 edittext 中的按钮添加
- streaming - 如何使用 .mpd 文件中的 shaka-player 添加字幕?
- typescript - 如何使用 Fastify 在 Nest.js 上获取 Apache access_log 之类的日志
- amazon-web-services - 如何使用 Lambda(python) 将 JSON 对象写入 S3 中的 .json 文件?
- azure - 在 Azure VM 中复制文件非常慢
- vue.js - 当 JSON v-data-table 中没有数据时,Vuetify 删除括号
- c++ - 实现模板化运算符重载时出现 C++ 链接器错误
- c# - Azure 函数的多个 HTTP.Redirect 选项?