简单而动态的MVC认证;基于角色的访问

时间:2011-06-30 15:11:37

标签: asp.net-mvc authentication asp.net-mvc-2 asp.net-membership rbac

我最近从传统的基于ASP.Net网络表单的开发迁移到MVC2,我一直在寻找MVC可以利用的最佳实践和规范来创建一个长期可维护的Web解决方案。

我已经实现了身份验证和RBAC(基于角色的访问)。我过去使用简单的静态RBAC来避免复杂性,但现在使用MVC我期望更好的选择和对传统方法的更多控制。成员资格API是ASP.Net安全性的默认设置,但它需要许多数据库对象,而且它也没有简单的方法来改变其行为,例如向User添加属性或覆盖其某些默认功能。

总结,过去我必须避免使用Membership API,并使用我自己的简单Userservice层方法来实现简单的安全性和安全性。 RBAC。我有页面级访问控制,我从基类(Pagebase)中处理它,从中导出所有Web表单页面。我只需传递一些角色参数来配置页面的安全性。我们的用户和角色维护非常简单,我不需要安全问题,哈希密码,盐等等。至少到现在为止。

  

现在,使用MVC - 我需要类似的东西   中央控制。我也可以   控制器级别和/或动作级别   授权([授权]或我的   自定义)。我可以部署'授权   过滤器'(如动作过滤器)。我也是   想要动态RBAC。我想要   使用会员功能,但我   不想要它的表并避免其他   上面提到的额外的东西。

基于静态成员资格API的方法:Role based security asp.net mvc

我了解到我可以覆盖成员资格提供程序以及角色提供程序,以便完全控制后台处理并利用位于其上的Membership API和RBAC的功能

例如,

  

自定义会员提供商

           

实施角色提供程序

     

我是这样来的,我想确保我走在正确的道路上,这种方法将逐步引导我进入动态RBAC,我可以向管理员级用户公开配置RBAC。这是我的要求 -

  1. 我希望使用Membership API值得使用MVC并允许我覆盖其默认实现。
  2. 我不想要任何额外的桌子。我希望将它保留在最小的用户/角色表中,不包含不需要的特殊字段。
  3. 我可以使用自己的服务层方法来访问和管理数据库中的表 - 没有成员资格默认值。
  4. 如果过于复杂,我现在可以使用静态RBAC,但将来我希望有一个动态RBAC。
  5. 我倾向于仅使用Membership API,因为我发现它可以提供有用的属性,否则我必须自己部署。
  6. 希望它不会变得凌乱,遵循我的DAL /服务层并允许控制器级别&行动级别RBAC。
  7. 请指导我并分享您的建议。


    编辑1: 我从SO中找到了更多:(说要自己推出)

1 个答案:

答案 0 :(得分:1)

哇,已经超过一年了!

好吧,我试图实现一个自定义成员资格提供程序,但后来我想要更多的自定义,并希望为某些模型和操作提供更多的临时功能。

所以,最后,我最终使用了一个简单(但非常有效)的控制器级动作过滤器 -

public class IsAuthorizeAttribute : AuthorizeAttribute
...
public IsAuthorizeAttribute(Rights rightToAuthenticate)

权限是我用来声明权限的自定义枚举(大多数都是在控制器级别绑定,但有些也在操作级别)。这与简单的表结构相结合:

  • 用户
  • 角色
  • 的UserRole