【问题标题】:Using the ASP.NET membership provider database with your own database?将 ASP.NET 成员资格提供程序数据库与您自己的数据库一起使用?
【发布时间】:2010-03-10 15:18:49
【问题描述】:

我们正在开发一个 ASP.NET MVC 应用程序,目前它使用自己的数据库 ApplicationData 用于域模型,另一个 Membership 用于用户管理/会员提供程序。

我们在控制器中使用data-annotations 进行访问限制。

[Authorize(Roles = "administrators, managers")]

这对于简单的用例非常有用。


当我们扩展我们的应用程序时,我们的客户希望限制 specific users 访问我们的 ApplicationData 数据库的特定区域。

我们的每个产品都包含一个外键,表示产品所在的地区。

用户故事应该是:

  • NewYorkManagers 角色的用户应该只能编辑/查看在纽约组装的产品。

我们创建了一个占位符表 UserRightsRegions,其中包含 UserIdRegionId

我如何链接ApplicationDataMembership 数据库以便正常工作/拥有cross-database-key-references? (这样的事情甚至可能吗?)

感谢所有帮助!

【问题讨论】:

  • 出于同样的原因,我们创建了自己的会员服务提供商。这并不难,但它是一个老化的 API,您需要遵循它才能与 ASP.NET 框架的其余部分正确集成。请注意,您在这方面花费的时间比您想象的要多...

标签: c# sql-server asp.net-mvc c#-3.0 asp.net-membership


【解决方案1】:

在我看来,您应该能够可靠地将您的数据库与标准 aspnet_db 集成,但我建议不要复制或替换 aspnet_users 表。

这是所有使用 aspnet_db 模式的提供者的焦点,包括可能增加但不实现自定义替换的自定义提供者。

为了最大限度地重复使用提供程序堆栈/API 中经过测试的强大基础架构代码,最好遵循该流程。

您将需要非常注意任何修改后的成员核心功能,并确保您的新约束在每种情况下都以预期的方式运行。

我发现最需要注意的成员资格故事方面是删除用户,对删除用户存储过程的简单修改/添加可以有效地解决这个问题。

【讨论】:

    【解决方案2】:

    听起来您可能需要创建自己的自定义会员提供程序。您可能(这里不是肯定的)扩展现有的,因此您不必完全重新发明它。 Here 是来自 ASP.net 的视频,描述了如何做到这一点。谷歌“asp.net 会员提供者”更多。

    【讨论】:

      【解决方案3】:

      您可以尝试滚动自己的会员资格,也可以像 Dave 建议的那样延长会员资格。

      创建您自己的 [Users] 表,该表可以根据 aspnet_Membership 表进行填充。因此,您可以更好地控制它。

      您也可以只实施一个更复杂的个人资料系统。 .NET 团队现在改进了配置文件的存储方式,因此您现在可以将它们设置为存储在实际表中,而不是“散播”它们 [感谢上帝]。

      Table Profile Provider

      【讨论】:

        【解决方案4】:

        如果您找到合适的文章,扩展会员提供程序以提供额外功能真的很容易。我已经将我的用户表移动到我的主 SQL 服务器表,并编写了我自己的角色管理器,它从一个单独的表中获取值。听起来您需要做的是在您的用户数据库中设置一个包含每个用户位置的表,然后在用户对象上创建一个方法,例如“GetLocation()”,从数据库返回用户的位置,您然后可以使用它从您的主数据库中过滤您的数据。这里有几篇我在书签中闲逛的文章,看看它们是否有帮助,如果你在 ASP.NET 主站点或 google 上查看会员提供程序扩展文章,周围有很多。 http://msdn.microsoft.com/en-us/library/ms998347.aspx http://www.4guysfromrolla.com/articles/120705-1.aspx http://msdn.microsoft.com/en-us/library/aa479048.aspx

        【讨论】:

          【解决方案5】:

          正如其他人所指出的,有许多很好的资源可以帮助您使用现有数据库创建自定义提供程序。

          看起来您正朝着正确的方向使用映射表。我认为您缺少的一件是Distributed Queries。此链接特定于 Sql Server 2008。如果您使用的是 Sql Server 2005 文档,则那里有一个链接。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-30
            • 1970-01-01
            • 1970-01-01
            • 2011-04-21
            • 1970-01-01
            • 2010-11-06
            相关资源
            最近更新 更多