Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在AddPolicy语句中连接条件Requires表达式_C#_.net_.net Core - Fatal编程技术网

C# 如何在AddPolicy语句中连接条件Requires表达式

C# 如何在AddPolicy语句中连接条件Requires表达式,c#,.net,.net-core,C#,.net,.net Core,我正在以以下方式配置我的授权方法: services.AddAuthorization(options => { options.AddPolicy("Branch", policy => policy.RequireClaim(ClaimTypes.Role, "Admin")); }); 这与我在控制器中的“分支”策略完美配合。 我需要实现的是允许多个索赔要求。在这种情况下,即使只满足其中一个要求,也会进行身份验

我正在以以下方式配置我的授权方法:

    services.AddAuthorization(options =>
    {
        options.AddPolicy("Branch", 
            policy => policy.RequireClaim(ClaimTypes.Role, "Admin"));
    });
这与我在控制器中的“分支”策略完美配合。 我需要实现的是允许多个索赔要求。在这种情况下,即使只满足其中一个要求,也会进行身份验证。 我通过在后面添加BranchManager声明来尝试这种方法。但它不起作用

        services.AddAuthorization(options =>
        {
            options.AddPolicy("Branch", 
                policy => policy.RequireClaim(ClaimTypes.Role, "Admin"));
            options.AddPolicy("Branch",
                policy => policy.RequireClaim(ClaimTypes.Role, "BranchManager"));
        });
我还尝试连接Requirecall语句

        services.AddAuthorization(options =>
        {
            options.AddPolicy("Branch", 
                policy => policy.RequireClaim(ClaimTypes.Role, "Admin")
                                .RequireClaim(ClaimTypes.Role, "BranchManager"));
        });

而且它也不起作用,因为系统希望“Admin”和“BranchManager”声明都被清除。是否有一种优雅的方法可以实现这一点:如果至少满足一个要求,则进行授权?

如果深入了解Microsoft.AspNetCore.Authorization.authorizationPolicyBuilder的源代码,您将看到该方法的一个版本如下所示

公共授权PolicyBuilder RequiredRecall(字符串claimType,IEnumerable requiredValues)

第二个参数必须是您所追求的值的IEnumerable

options.AddPolicy("Branch", 
                policy => policy.RequireClaim(ClaimTypes.Role, new List<string> {"Admin", "BranchManager" }));
options.AddPolicy(“分支”,
policy=>policy.requirecarel(ClaimTypes.Role,新列表{“Admin”,“BranchManager”});