在AuthorizeAttribute上例外

时间:2016-02-28 16:32:00

标签: c# asp.net-mvc asp.net-mvc-5

我有一个有很多动作的控制器。除了一个操作外,某些用户都应该可以访问所有内容:

[Authorize(Roles = "Admin")]
public class SecretsController : Controller
{
    [Authorize]
    public ActionResult Index()
    {
        return View(...);
    }

    ...
}

即使[Authorize (Roles = null)]也不起作用。方法属性将被忽略!我怎么能只为一个动作获得例外?像AllowAnonymous允许它但登录用户可见吗?

2 个答案:

答案 0 :(得分:3)

您可以像我在下面的代码中一样使用OverrideAuthorization属性:

[Authorize(Roles = "Admin")]
public class SecretsController : Controller
{

    [OverrideAuthorization]
    [Authorize()]
    public ActionResult Index()
    {
        return View(...);
    }

    ...
}

使用ASP.Net MVC5附带的[OverrideAuthorization],您可以告诉Index操作覆盖/忽略在控制器级别定义的授权规则。

通过执行此操作,SecretsController中定义的所有操作仅对管理角色可见,但Index操作除外,只有经过身份验证的用户才能看到该操作,即使它们不是在管理员角色中。

答案 1 :(得分:2)

使用属性AllowAnonymous

[Authorize(Roles = "Admin")]
public class SecretsController : Controller
{
    [AllowAnonymous]
    public ActionResult Index()
    {
        return View(...);
    }

    ...
}