c# - 创建不检查管理员角色声明的策略

标签 c# asp.net-core

我想在 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")
                        );
             }
});

关于c# - 创建不检查管理员角色声明的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60025588/

相关文章:

c# - 删除指定设计样本中的标签间距

javascript - 如何在 Asp.Net Core 中不知道正确名称的情况下包含 js 文件

asp.net-core - Kestrel 解决 Azure 应用服务中的绑定(bind)错误

docker - 什么是Asp.net Core RC2 Dockerfile的正确ENTRYPOINT

c# - .NET 中的深度反射(reflection)

c# - 计算二维有符号距离场

c# - 单元测试......如何改进它

c# - 如何将大量数据传递给网络服务

c# - 使用 IStringLocalizer 对数据注释进行本地化

c# - 使用 Blazor 渲染未知深度的树结构