如果我在控制器级别应用了授权属性,是否可以在该控制器上的某个方法上覆盖它?

由于

詹姆斯

有帮助吗?

解决方案

这取决于什么样的“覆盖”。你要。您无法删除该类中的属性,但您可以再次将该属性添加到该方法中,以使限制更具限制性。

更新以回应评论。首先,制作自己的AuthorizeAttribute有点危险。 AuthorizeAttribute包含与缓存属性交互的代码,以确保缓存无法向未授权用户提供受保护内容。您至少应该对现有的AuthorizeAttribute进行子类型,而不是创建全新的内容。但是,通常,最好使用现有的AuthorizeAttribute,并通过创建新的/查找现有的ASP.NET成员资格提供程序来专门授权。

我不认为对“覆盖”动作的过滤器进行过滤是不错的设计。控制器上的过滤器。但是,您可以将控制器上的过滤器设计更改为不需要对某个名称的操作进行授权。例如,您可以覆盖AuthorizeAttribute.AuthorizeCore方法来测试操作名称,方法与现有方法测试用户名和角色的方式相同。请仔细注意此方法中有关线程安全的注释。

其他提示

我不确定这是否是完全相同的问题,但它可能会有所帮助......

如何制作ActionFilter action方法优先于控制器上的相同ActionFilter

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top