如何在 AddPolicy 语句中连接条件 RequireClaims 表达式

我以这种方式配置我的授权方法:


    services.AddAuthorization(options =>

    {

        options.AddPolicy("Branch", 

            policy => policy.RequireClaim(ClaimTypes.Role, "Admin"));

    });

这与我在控制器中的“分支”策略完美配合。我需要实现的是允许多个声明要求..即使只满足其中一个要求,也会进行身份验证。我通过添加 BranchManager Claim 来尝试这种方式。但这不起作用。


        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”声明都已声明。有没有一种优雅的方法来实现这一点:如果至少满足一个要求则授权?


POPMUISE
浏览 72回答 1
1回答

红颜莎娜

如果您深入研究 Microsoft.AspNetCore.Authorization.AuthorizationPolicyBuilder 的源代码,您将看到该方法有一个像这样的版本公共 AuthorizationPolicyBuilder RequireClaim(string ClaimType, IEnumerable requiredValues);第二个参数必须是您所追求的值的 IEnumerable。options.AddPolicy("Branch",&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;policy&nbsp;=>&nbsp;policy.RequireClaim(ClaimTypes.Role,&nbsp;new&nbsp;List<string>&nbsp;{"Admin",&nbsp;"BranchManager"&nbsp;}));
打开App,查看更多内容
随时随地看视频慕课网APP