1

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

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

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

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

基于静态成员 API 的方法:基于角色的安全性 asp.net mvc

我了解到,我可以覆盖 Membership 提供程序以及 Role Provider来获得对后台处理的完全控制,并利用位于其之上的 Membership API 和 RBAC 的功能。

例如,

自定义会员提供者

实现角色提供者

我一路走来,我想确保我走在正确的道路上,并且该方法将逐渐引导我使用动态 RBAC,我可以将其公开给管理员级别的用户以配置 RBAC。这是我的要求-

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

请指导我并分享您的建议。


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

4

1 回答 1

1

哇,已经一年多了!

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

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

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

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

  • 用户
  • 角色
  • 用户角色
于 2012-08-30T14:21:22.813 回答