首页 > 解决方案 > 创建不检查管理员角色声明的策略

问题描述

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

如果用户在策略创建中具有管理员角色,我如何跳过检查声明?

标签: c#asp.net-core

解决方案


也许基于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")
                        );
             }
});

推荐阅读