【问题标题】:How can I add an OR clause to a ASP.NET CORE Authorization Policy?如何将 OR 子句添加到 ASP.NET CORE 授权策略?
【发布时间】:2021-03-28 06:46:03
【问题描述】:

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

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

            options.AddPolicy("AdjustmentFundAdmin", policy => { 
                policy.RequireClaim("AdjustmentFundAdmin");
            });
            options.AddPolicy("ManifestApprover", policy => {
                policy.RequireClaim("ManifestApprover");
            });
            options.AddPolicy("InvoiceProcessor", policy => {
                policy.RequireClaim("InvoiceProcessor");
            });

但我想做的是如果有声明/值:policy.RequireClaim("manna_tms_userlevel", "magician") 然后忽略策略中的这些声明检查。

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

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

【问题讨论】:

标签: c# asp.net-identity asp.net-core-3.1 claims-based-identity asp.net-authorization


【解决方案1】:

感谢@TonyHopkinson 的帮助!

我能够让它像这样工作:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2020-01-21
    • 2019-12-31
    • 2020-08-08
    • 2018-12-28
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多