【问题标题】:Create a policy that don't check a claim for Admin role创建不检查管理员角色声明的策略
【发布时间】:2020-05-18 09:41:47
【问题描述】:

我想在 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


    【解决方案1】:

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

    【讨论】:

    • 你能修复为 context.User.HasClaim(p => p.Type == "CanGetDefinition") 来进行检查。那么这是正确的解决方案
    • 完成。抱歉,我没有实时查看。
    猜你喜欢
    • 2022-11-17
    • 2014-02-28
    • 2015-05-28
    • 2018-10-26
    • 2018-07-07
    • 1970-01-01
    • 2017-01-31
    • 2020-09-17
    • 1970-01-01
    相关资源
    最近更新 更多