我有一个有很多动作的控制器。除了一个操作外,某些用户都应该可以访问所有内容:
[Authorize(Roles = "Admin")]
public class SecretsController : Controller
{
[Authorize]
public ActionResult Index()
{
return View(...);
}
...
}
即使[Authorize (Roles = null)]
也不起作用。方法属性将被忽略!我怎么能只为一个动作获得例外?像AllowAnonymous
允许它但登录用户可见吗?
答案 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(...);
}
...
}