ASP.NET MVC:覆盖单个操作的授权筛选器角色

时间:2016-03-24 17:26:14

标签: c# asp.net-mvc

我有一个授权过滤器,用于注释控制器类,如下所示:

[Authenticated(Roles = "read_mail", "contact_user")]
public class MailController : Controller { ... }

但是,有一个操作,用户只需要一个权限:

[Authenticated(Roles = "read_mail")]
public ActionResult Inbox() { ... }

正如它当前设置的那样,只有注释该类的过滤器才会被确认并执行相应的重定向。有没有办法只为特定的操作覆盖它,或者我应该从控制器中删除过滤器并为每个操作定义它?

1 个答案:

答案 0 :(得分:1)

您可以按照here所述影响应用过滤器的顺序。对于您的用例,将Order添加到您的属性可能会起到作用:

[Authenticated(Roles = "read_mail", "contact_user", Order = 1)]
public class MailController : Controller { ... }

[Authenticated(Roles = "read_mail", Order = 0)]
public ActionResult Inbox() { ... }

具有最低Order的过滤器将首先运行。

修改

我刚发现Order不会带来太多好处。两个过滤器仍然执行(仅以相反的顺序)。要在控制器级别覆盖过滤器:请查看this answer