使用ASP.NET成员资格提供程序数据库和您自己的数据库

时间:2010-03-10 15:18:49

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

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

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

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

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


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

我们的每个产品都包含一个外键,指的是产品组装的区域。

用户故事将是:

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

我们创建了一个包含UserRightsRegionsUserId的占位符表RegionId

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

所有帮助都非常感谢!

5 个答案:

答案 0 :(得分:2)

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

这是使用aspnet_db架构的所有提供程序的焦点,包括可能增强但不实现自定义替换的自定义提供程序。

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

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

我发现的会员故事最需要注意的是删除用户,对删除用户的简单修改/添加可以很好地管理这个。

答案 1 :(得分:0)

听起来您可能需要创建自己的自定义成员资格提供程序。你可能(不是积极的)扩展现有的,所以你不必完全重新发明它。 Here是来自ASP.net的视频,描述了如何执行此操作。谷歌“asp.net会员提供商”更多。

答案 2 :(得分:0)

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

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

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

Table Profile Provider

答案 3 :(得分:0)

如果您找到了正确的文章,扩展成员资格提供程序以实现额外功能非常容易。我已将用户表移动到我的主SQL服务器表,并编写了自己的角色管理器,从单独的表中获取值。你需要做的是在你的用户数据库中设置一个表,每个用户的位置,然后在用户对象上创建一个方法,如“GetLocation()”,从数据库返回用户的位置,你然后可以使用它来过滤主数据库中的数据。这里有一些我在我的书签中喋喋不休的文章,看看它们是否有用,如果你看一下主要的ASP.NET网站或谷歌的会员提供商扩展文章,那里有很多。 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

答案 4 :(得分:0)

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

看起来你正朝着正确的方向前进,有了映射表。我认为你遗失的那一件是Distributed Queries。此链接特定于Sql Server 2008.如果您使用的是Sql Server 2005的文档,则有链接。