加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 覆盖控制器AuthorizeAttribute只有一个操作

发布时间:2020-12-15 18:54:19 所属栏目:asp.Net 来源:网络整理
导读:我有一个用AuthorizeAttribute装饰的控制器。控制器包含几个操作,除了需要由CustomAuthorizeAttribute提供一些自定义认证的操作之外,所有操作都需要认证。 我的问题是一旦我添加了[授权]在控制器级别可以覆盖它(或删除它与[CustomAuthorize]只是一个动作?
我有一个用AuthorizeAttribute装饰的控制器。控制器包含几个操作,除了需要由CustomAuthorizeAttribute提供一些自定义认证的操作之外,所有操作都需要认证。

我的问题是一旦我添加了[授权]在控制器级别可以覆盖它(或删除它与[CustomAuthorize]只是一个动作?或者,我必须从控制器级别删除[授权],并将它单独添加到每个其他操作?

我纯粹为了方便,因为我是懒惰,不想装饰每一个动作与AuthorizeAttribute。

[Authorize]
public class MyController : Controller {

  //requires authentication
  public ViewResult Admin() {
    return View();
  }

  //... a lot more actions requiring authentication

  //requires custom authentication
  [CustomAuthorize]  //never invoked as already failed at controller level
  public ViewResult Home() {
    return View();
  }

}

解决方法

您可以更改属性运行的顺序(使用Order属性),但我相信在这种情况下,它们将仍然运行,除非生成立即生效的结果。关键是在最高级别(类)应用最小限制性属性,并对方法获得更多限制。例如,如果您希望Home操作公开,您需要从类中删除Authorize属性,并将其应用于其他每个方法。

如果操作具有相同的允许级别,但具有不同的结果,则改变顺序可能就足够了。例如,您通常会重定向到“登录”操作,但对于Home,您要重定向到“关于”操作。在这种情况下,给予类属性Order = 2和Home动作属性Order = 1。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读