gpt4 book ai didi

asp.net-core - .Net core 继承 Controller 中的授权属性

转载 作者:行者123 更新时间:2023-12-03 19:41:32 27 4
gpt4 key购买 nike

我在授权策略方面遇到了一些问题。我有一个带有 Action 的 baseWebApiController

[HttpDelete("{id}"), Authorize(Policy = "Administrator")]
public virtual async Task<IActionResult> Delete(int id) {}

但是在继承自上述内容的某个 Controller 中,我也想授予用户访问权限,其策略如下:
[HttpDelete("{id}"), Authorize(Policy = "All")]
public override Task<IActionResult> Delete(int id){}

似乎普通用户无法访问此操作。我是否必须进一步搜索策略配置中的错误,或者由于 Controller 是继承的,它的属性被忽略了吗?

谢谢

最佳答案

AuthorizeAttribute 是一个继承的属性,允许多次应用它自己。

这意味着在继承已经有 AuthorizeAttribute 的方法时,这将被结转。因此,您子类中的最终函数定义将如下所示:

[Authorize(Policy = "Administrator")]
[Authorize(Policy = "All")]
public override Task<IActionResult> Delete(int id)

因此,该路线现在有两个政策。这是一个问题,因为政策旨在累积。因此,必须通过所有策略才能使身份验证成功。

当然,这对您不起作用,因为您实际上想从基类中“清除”原始策略。但是,这是不可能的,因此您必须从基类中删除策略,并可能为这些策略引入第二个仅限管理员的类。

这里的一般问题是您的策略设计似乎基于角色。您正在使用策略,但实际上,您正在检查那里的角色。相反,您应该考虑处理要求:例如,要删除某些内容,用户需要满足“DeletionAllowed”要求。这允许更细粒度的策略系统。和最大的好处?需求处理程序是分离的:所以一个能够满足需求的处理程序就足以通过它。

关于asp.net-core - .Net core 继承 Controller 中的授权属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46169645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com