我们正在开发一个 ASP.NET MVC应用程序,它目前为域模型使用它自己的数据库ApplicationData
,为用户管理/成员资格提供者使用另一个Membership
。
我们在控制器中使用data-annotations
进行访问限制。
[Authorize(Roles = "administrators, managers")]
这对于简单的用例非常有用。
在我们扩展应用程序时,我们的客户希望限制specific users
访问ApplicationData
数据库的特定区域。
我们的每个产品都包含一个外键,指的是产品组装的区域。
用户故事将是:
我们创建了一个包含UserRightsRegions
和UserId
的占位符表RegionId
。
我如何链接 ApplicationData
和Membership
数据库才能正常工作/ cross-database-key-references
? (这样的 甚至 可能吗?)
所有帮助都非常感谢!
答案 0 :(得分:2)
在我看来,您应该能够可靠地将数据库与标准aspnet_db集成,但我建议不要复制或替换aspnet_users表。
这是使用aspnet_db架构的所有提供程序的焦点,包括可能增强但不实现自定义替换的自定义提供程序。
为了最大限度地重用提供程序堆栈/ API中经过测试的强大基础架构代码,最好采用该流程。
您需要非常关注任何已修改的成员资格核心功能,并确保新约束在每种情况下以预期方式运行的方式。
我发现的会员故事最需要注意的是删除用户,对删除用户的简单修改/添加可以很好地管理这个。
答案 1 :(得分:0)
听起来您可能需要创建自己的自定义成员资格提供程序。你可能(不是积极的)扩展现有的,所以你不必完全重新发明它。 Here是来自ASP.net的视频,描述了如何执行此操作。谷歌“asp.net会员提供商”更多。
答案 2 :(得分:0)
您可以尝试滚动自己的会员资格,或者像Dave建议的那样延长。
创建您自己的[Users]
表,可以根据aspnet_Membership表填充该表。因此,您可以更好地控制它。
您也可以实施更具参与性的个人资料系统。 .NET团队现在已经改进了配置文件的存储方式,因此您可以将它们设置为现在存储在实际的表中而不是“blobicizing”它们[感谢上帝]。
答案 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的文档,则有链接。