1

我创建了一个使用 DotNetNuke.Security.Membership.MembershipProvider 作为基础的自定义 MembershipProvider。在我们的实施中,CRM 系统为能够连接到我们任何网站的用户存储所有联系数据,因此未实施 CreateUser 和 DeleteUser 等功能。MembershpProvider 仅处理身份验证、成员资格并返回带有 CRM 系统数据的 UserInfo 对象。

这工作正常。

我遇到的问题是 PersonalizationController。我们的 CRM 系统存储有关用户/联系人的信息,但不存储有关用户个性化设置的信息。我希望 DNN 继续存储 PersonalizationController / PersonalizationModule 中定义的个性化设置(例如,在 Profile 表中)。问题是,当 DataProvider 调用 LoadProfile() 存储过程时,它在更新时失败,因为 Profile 表有一个与之关联的约束,要求 UserId 已经添加到 User 表中。我可以修改这个外键关系,但这不是一个好的架构。

所以,问题是:在这种情况下,什么是好的架构选择?

MembershipProvider 和 DataProvider 遵循 Provider 模型,所以可以替换,但我不想替换 DataProvider。PersonalizationController 不遵循提供者模型,因此不能轻易替换。更新存储过程或外键可能会导致升级问题(或至少使多年后的调试变得困难/需要良好的文档)。同样通过更改源代码(我可以简单地更新 PersonalizationController,行 DataProvider.Instance().AddProfile(userId, portalId); 调用首先将用户添加到用户表(这应该是不必要的——是的,我明白Users 和 aspnet_Users 表之间的区别,所以理论上,添加用户记录应该没问题,尽管只是因为外键而显得多余。

有什么想法可以使用提供者模型替换 PersonalizationController 吗?或者我还能如何最大限度地减少升级或管理问题?我真的在尝试构建一个系统,我们可以在其中随时重新安装 DNN,只需在其上安装我们所有的模块/提供程序/皮肤并复制现有系统(当然没有内容)。

在这种情况下,推荐的方式/推荐的架构是什么?

提前致谢。

格雷格

4

1 回答 1

0

将 UserID 保留在 DNN 数据库中是否有意义,以便您可以利用许多不同模块可能在 Users 表上具有的所有这些键。如果您没有用户 ID,您很可能会遇到模块问题。

DNN 的 AD 提供者创建 DNN 用户,并将这些用户与 AD 用户匹配,以解决此问题。

于 2013-06-26T15:31:16.147 回答