3

所以这是我当前的代码:

List<string> rowGroups = GetFileGroups((int)row.Cells["document_security_type"].Value);
bool found = false;
System.Security.Principal.WindowsPrincipal p = new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent());

foreach (string group in rowGroups)
{
  if (p.IsInRole(group))
  {
    found = true;
    break;
  }
}

这是几个月前有人完成的,我很难理解为什么它不起作用。该公司最近刚刚从一个域名转移到另一个域名。所以我很好奇 p.IsInRole("String") 函数将使用什么域控制器。我假设无论计算机使用什么,它都会使用默认 DC。

奇怪的是,办公室中运行此程序的计算机可能位于 2 个单独的域中。在List<string>对象中,我有两个可能的域。因此它可以包含诸如“domainA\groupA”、“domainA\userB”、domainB\groupC 和/或“domainB\userD”之类的项目。

所以我的主要问题是 IsInRole 函数永远不会返回 true。我知道它应该,我什至用 domainA\Domain 用户对其进行了测试,但仍然得到一个错误的返回。

有任何想法吗?更改代码是可能的,但不是想要的。我不是 100% 我什至可以编译它...

4

3 回答 3

0

我必须指出,你真的在​​你的字符串中正确地转义了你的 '\' 字符吗?就像在“domainA\\groupA”中一样?

于 2008-11-12T20:01:20.653 回答
0

好吧,要解决这个问题,我只需要专门添加组的每个用户而不是组名。

于 2008-11-14T19:41:20.517 回答
0

当人们尝试在 Active Directory 中使用 Outlook 电子邮件列表来实现基于角色的安全性时,我发现了一些问题。这些出现在 Active Directory 中,很难与实际的安全组(您可以在 ACL 中引用的安全组等)区分开来。让您的管理员验证您使用的任何组是安全组。

于 2008-11-14T19:51:44.100 回答