【问题标题】:claim-based Authorization for multiple Claims in Asp.net CoreAsp.net Core 中多个声明的基于声明的授权
【发布时间】:2025-11-27 19:35:02
【问题描述】:

从这篇文章中得到帮助:

https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies

我尝试为我的操作创建一些策略,但在某些操作中我希望拥有多个策略,如果用户拥有其中任何一个,他们就可以访问控制器的操作:

    [Authorize(Policy = "CanAccessMenu1")]
    [Authorize(Policy = "CanAccessMenu2")]
 public async Task<IActionResult> ActionFroMultiplePolicies([FromBody] ActionRequest request)
        {
//..............
}

如何合并这些政策?我可以使用这样的东西吗?

[Authorize(Policy = "CanAccessMenu1, CanAccessMenu2")]

在这种情况下,也许我需要对这个覆盖函数进行一些更改。但我对此一无所知:

Protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, CanAccessRequirement requirement)
        {
        }

感谢您的帮助

【问题讨论】:

    标签: controller asp.net-core authorization data-annotations authorize-attribute


    【解决方案1】:

    不是你想要的方式;政策旨在累积。例如,如果您使用两个单独的属性,那么它们必须都通过。

    您必须在单个策略中评估 OR 条件。但是您不必在单个处理程序中将其编码为 OR。您可以有一个具有多个处理程序的需求。如果任一处理程序标记成功,则满足要求。请参阅 blowdart 的Authoriation Workshop 中的第 6 步。

    【讨论】:

    最近更新 更多