如何向 ASP.NET CORE 授权策略添加 OR 子句?

Jus*_*son 5 c# claims-based-identity asp.net-authorization asp.net-identity asp.net-core-3.1

我有一个在系统中执行某些操作所需的声明列表。我有一个策略列表来验证这些声明是否存在以执行某些操作。这一切都按预期进行。

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

            options.AddPolicy("AdjustmentFundAdmin", policy => { 
                policy.RequireClaim("AdjustmentFundAdmin");
            });
            options.AddPolicy("ManifestApprover", policy => {
                policy.RequireClaim("ManifestApprover");
            });
            options.AddPolicy("InvoiceProcessor", policy => {
                policy.RequireClaim("InvoiceProcessor");
            });
Run Code Online (Sandbox Code Playgroud)

但我想做的是,如果存在声明/值:policy.RequireClaim(“manna_tms_userlevel”,“magician”),则忽略策略中的这些声明检查。

我尝试添加多个,但这似乎只需要两者而不是其中之一。

            options.AddPolicy("AdjustmentFundAdmin", policy => {
                policy.RequireClaim("AdjustmentFundAdmin");
                policy.RequireClaim("manna_tms_userlevel", "magician");
            });
Run Code Online (Sandbox Code Playgroud)

Jus*_*son 9

感谢@TonyHopkinson 的帮助!

我能够让它像这样工作:

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