自定义成员资格提供者*没有*数据库?

时间:2013-05-30 18:59:20

标签: c# asp.net-mvc-4 membership-provider simplemembership

我一直在寻找有关MVC 4中会员提供商变更的各种SO问题,博客文章等等。虽然我喜欢许多变化和事物的简化(特别是不合时宜的)盒子外部登录支持),我还是找不到一个看似简单的东西......

如何使用使用其他数据源的自定义提供程序覆盖成员资格/角色提供程序?

我不想替换WebSecurity或任何激烈的东西,因为它处理我想要处理的所有事情。 (例如,Cookie管理。)我不想做任何会破坏现有外部登录提供程序支持的事情,因为我的应用程序将这些支持与本地登录一起使用。我要做的就是插入会员系统和它背后的数据库,并自定义数据提取。

默认情况下创建的表是:

  • 用户配置
  • webpages_Membership
  • webpages_OAuthMembership
  • webpages_Roles
  • webpages_UsersInRoles

虽然这有效,但我有理由在一些自定义对象后面抽象它并打破应用程序和数据库之间的耦合。 (基本上,我有一些充满业务逻辑的自定义域模型应该处理所有这些,我希望成员资格/角色系统使用这些模型而不是数据库。这些模型可能从数据库获取它们的持久数据,它们可能不。那应该没关系。)

我发现用于自定义的大多数引用声称它很容易做到,我所要做的就是修改UserProfile模型,在各种调用中包含我的新自定义字段,并将调用更新为{{1将它指向我的数据库模式。

但我没有使用数据库。 (或者,更具体地说,就应用层而言,没有数据库这样的东西。只有我的域模型。)因此,简单的自定义并没有真正改变任何东西。

有没有办法在会员系统和数据库之间插入,这样我就可以为现有的会员提供者制作自定义数据提供者?

1 个答案:

答案 0 :(得分:1)

您应该能够创建自定义SimpleRoleProvider并将其插入应用程序,方法是将web.config修改为以下内容:

<add name="SimpleRoleProvider" type="MyCustomRoleProvider.SimpleRoleProvider, MyCustomRoleProvider"/>

其中 MyCustomRoleProvider 是包含 SimpleRoleProvider 实现的程序集的名称。

然后只是删除 SimpleMembership 的初始化。 This article介绍了如何简化 SimpleMembership 的初始化过程。基本上从 AccountController 中删除 InitializeSimpleMembership 属性,并将初始化移动到Global.asax Application_Start方法。但在您的情况下,如果有任何需要,您可能希望添加自定义 SimpleRoleProvider 所需的任何初始化。

对于您所描述的实施,您很可能还必须创建自定义SimpleMembershipProvider