我最近从传统的基于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的功能
例如,
自定义会员提供商
- http://www.codeproject.com/KB/aspnet/CustomMembershipProviders.aspx
- http://mattwrock.com/post/2009/10/14/Implementing-custom-Membership-Provider-and-Role-Provider-for-Authinticating-ASPNET-MVC-Applications.aspx
实施角色提供程序
我是这样来的,我想确保我走在正确的道路上,这种方法将逐步引导我进入动态RBAC,我可以向管理员级用户公开配置RBAC。这是我的要求 -
请指导我并分享您的建议。
编辑1: 我从SO中找到了更多:(说要自己推出)
答案 0 :(得分:1)
好吧,我试图实现一个自定义成员资格提供程序,但后来我想要更多的自定义,并希望为某些模型和操作提供更多的临时功能。
所以,最后,我最终使用了一个简单(但非常有效)的控制器级动作过滤器 -
public class IsAuthorizeAttribute : AuthorizeAttribute
...
public IsAuthorizeAttribute(Rights rightToAuthenticate)
权限是我用来声明权限的自定义枚举(大多数都是在控制器级别绑定,但有些也在操作级别)。这与简单的表结构相结合: