我有一个授权过滤器,用于注释控制器类,如下所示:
[Authenticated(Roles = "read_mail", "contact_user")]
public class MailController : Controller { ... }
但是,有一个操作,用户只需要一个权限:
[Authenticated(Roles = "read_mail")]
public ActionResult Inbox() { ... }
正如它当前设置的那样,只有注释该类的过滤器才会被确认并执行相应的重定向。有没有办法只为特定的操作覆盖它,或者我应该从控制器中删除过滤器并为每个操作定义它?
答案 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。