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