WindowsPrincipal.IsInRole()未返回预期结果

时间:2008-11-12 16:28:49

标签: c# security active-directory security-roles iprincipal

所以这是我目前的代码:

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%我甚至可以编译它......

3 个答案:

答案 0 :(得分:0)

我必须指出,你是否真的在你的字符串中正确地转义你的'\'字符?如“domainA \\ groupA”?

答案 1 :(得分:0)

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

其他人有什么想法吗?

答案 2 :(得分:0)

当人们尝试在Active Directory中使用Outlook电子邮件列表进行基于角色的安全性时,我遇到了问题。它们显示在Active Directory中,很难区分实际的安全组(您可以在ACL中引用的安全组等)。让您的管理员验证您使用的任何组是安全组。