Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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# 如何将OR子句添加到ASP.NET核心授权策略?_C#_Asp.net Identity_Asp.net Core 3.1_Claims Based Identity_Asp.net Authorization - Fatal编程技术网

C# 如何将OR子句添加到ASP.NET核心授权策略?

C# 如何将OR子句添加到ASP.NET核心授权策略?,c#,asp.net-identity,asp.net-core-3.1,claims-based-identity,asp.net-authorization,C#,Asp.net Identity,Asp.net Core 3.1,Claims Based Identity,Asp.net Authorization,我有一个在系统中执行某些操作所需的声明列表。我有一份政策清单,用于验证是否存在执行某些操作的声明。一切如期进行 我想做的是,如果另一个声明具有特定值,则忽略对这些声明的检查。例如,我有以下政策: options.AddPolicy("AdjustmentFundAdmin", policy => { policy.RequireClaim("AdjustmentFundAdmin");

我有一个在系统中执行某些操作所需的声明列表。我有一份政策清单,用于验证是否存在执行某些操作的声明。一切如期进行

我想做的是,如果另一个声明具有特定值,则忽略对这些声明的检查。例如,我有以下政策:

            options.AddPolicy("AdjustmentFundAdmin", policy => { 
                policy.RequireClaim("AdjustmentFundAdmin");
            });
            options.AddPolicy("ManifestApprover", policy => {
                policy.RequireClaim("ManifestApprover");
            });
            options.AddPolicy("InvoiceProcessor", policy => {
                policy.RequireClaim("InvoiceProcessor");
            });
但我想做的是,如果存在声明/值:policy.requirecaire(“manna_tms_userlevel”,“magiciar”),则忽略策略中的这些声明检查

我试图添加多个,但这似乎只需要两个,而不是一个或另一个

            options.AddPolicy("AdjustmentFundAdmin", policy => {
                policy.RequireClaim("AdjustmentFundAdmin");
                policy.RequireClaim("manna_tms_userlevel", "magician");
            });

感谢@TonyHopkinson的帮助

我能让它像这样工作:

           options.AddPolicy("AdjustmentFundAdmin", policy => {
                policy.RequireAssertion(context =>
                    context.User.HasClaim(c =>
                    (c.Type == "AdjustmentFundAdmin" || 
                    (c.Type == "manna_tms_userlevel" && 
                     c.Value == "magician"))));
            });

半途而废为什么我需要多个处理器来满足一个需求?啊,好吧,这是有道理的!当我以前试着阅读它时,我不明白这一切是如何结合在一起的:)谢谢@TonyHopkinson