【问题标题】:.net mvc Foreign Key Relationships with Active Directory.net mvc 与 Active Directory 的外键关系
【发布时间】:2013-01-03 13:01:11
【问题描述】:

我正在开发一个 Intranet 应用程序并已成功与 Active Directory 集成。

当我们添加新客户时,我想从下拉列表中分配客户顾问。

我可以使用以下内容填充下拉列表

PrincipalContext pc = new PrincipalContext(ContextType.Domain, "DOMAIN", "dc=domain,dc=org");
GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, "customerAdvisors");
ViewBag.Guid = new SelectList(group.Members, "Guid", "DisplayName");

然后我想将所选用户的 Guid 与客户数据一起存储在数据库中。

但是,我不确定如何在我的模型中设置外键约束,因为我要加入的表位于 Active Directory 中。

我是否需要在我的数据库中创建一个单独的 Employee 表并同步所需的字段,或者是否有一种简化的方法?

【问题讨论】:

  • 您能否处理将所有顾问加载到内存中并使用 LINQ 或其他东西加入列表

标签: asp.net-mvc active-directory


【解决方案1】:

我从来没有这样做过,但是一些快速的研究使它看起来成为可能。

您可以将您的顾问的 Guid 保存在您的客户身上。 AD Guid 可以进入 Guid 数据类型。 You should be able to query individual users by using this method:

UserPrincipal 用户 = UserPrincipal.FindByIdentity(pc, yourUsersGuidAsAString);

不利的一面是,每次您需要客户顾问的信息(例如他们的姓名或电子邮件地址)时,您都必须单独查询 AD。更难使用 ORM。

在我的应用程序中,我有一个不同的用例,但我也将我的应用程序与 AD 集成。我采取的路线是将这些信息保存在我自己的数据库中,而不是每次都点击 AD。很大程度上是因为我的架构让你很难以同样的方式进入 AD。此外,使用 ORM(如我的实体框架)来获取我想要的信息也更容易。这样做的缺点是,您需要确保数据库中的信息与 AD 中的信息保持同步。

您必须判断哪种方法最适合您的架构/用例。

希望对您有所帮助。

【讨论】:

  • 谢谢@Ben 这基本上是我的解决方案,只是想知道是否有更好的方法来做到这一点。如何保持数据同步。你有没有这样的脚本?
  • 很遗憾没有。就像我说的那样,我的用例和架构是不同的。在不涉及太多细节的情况下,我与 AD 的联系是间接的。我正在使用 ADFS 为我的用户进行联合身份验证。因此,每次我的用户登录时,我都会根据 AD 发送给我的声明更新他们的信息。我的 Web 应用程序无法直接访问我的 AD 服务器。对于您的情况,也许您可​​以设置一些东西来定期轮询 AD(例如始终运行并具有每 24 小时执行一次的计时器线程的 Windows 服务)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
相关资源
最近更新 更多