asp.net MVC控制器和身份验证

use*_*358 2 asp.net-mvc authorization forms-authentication asp.net-mvc-3

我有一堆控制器和相关的视图需要对它们应用基于角色的身份验证.我正在考虑在其上安装一个带有[authorize]属性定义的基本控制器,以便我可以让所有从该基类继承的控制器在登录后才可用.我测试过这个工作.我不确定这是否是最好的做法,或者这种方法是否会有任何陷阱.

将来,我需要只有特定角色的用户才能访问某些页面.角色列表将来自数据库表.因此,我只是在它继承的基本控制器中进行更改,而不是更改所有相关的控制器.这是正确的做法吗?

谢谢你的时间.

jga*_*fin 7

您可以组合任意数量的Authorize属性.

即你可以Authorize在你的基本控制器上有一个属性,在另一个控制器上有一个更具体的属性(例如指定一个角色),在控制器动作上有一个最具体的 属性(指定角色或用户)

[Authorize]
public class BaseController : Controller
{}

[Authorize(Roles="Administrator")]
public class AdminController : BaseController
{
    [Authorize(Roles="SuperUser")]
    public ActionResult SuperSecret()
    {}
}
Run Code Online (Sandbox Code Playgroud)

它将检查所有属性,并且只有在任何属性失败时才撤消访问权限.

将来,我需要只有特定角色的用户才能访问某些页面.

这就是基于角色的身份验证的工作原理.

角色列表将来自数据库表.

将角色加载到global.asax IPrincipal中方法的自定义中OnPostAuthenticate.

因此,我只是在它继承的基本控制器中进行更改,而不是更改所有相关的控制器.

我没有按照这个要求跟着你.您是否希望避免在控制器上指定角色?