检查用户是否属于管理员组 - C#

时间:2013-01-11 18:49:11

标签: c# active-directory windows-server-2008

我有代码验证用户是否在本地计算机上的管理员组中。如果用户直接出现在管理员组

中,则代码可以正常工作
using (DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./Administrators,group")) {
    foreach (object member in (IEnumerable)groupEntry.Invoke("Members"))
    {
        using (DirectoryEntry memberEntry = new DirectoryEntry(member))
        {
            if (memberEntry.Name.ToLower() == UserName.ToLower())
            {
                IsUserAdmin = true;
                break;
            }
        }
    } }

但是,如果用户存在于AD组中并且该AD组已添加到管理员组中,则代码将失败。另一种情况是用户是嵌套AD组的一部分,最后一个AD组是在管理员组中添加的。

如果用户直接添加并且相关的AD组存在时,我们如何检查用户是否属于管理员组?

我想让代码在Windows Server 2008,2008 R2和2012上运行

2 个答案:

答案 0 :(得分:2)

为什么不找到该用户的所有AD组,然后像以前一样检查该组是否存在于Administrators组中?您可以按照解决方案here找到用户的所有AD组。然后,您可以修改搜索条件,如:

var adminGroupMembers = (IEnumerable)groupEntry.Invoke("Members");
....
//where userGroups contains all AD group names to which user belongs to
foreach(var group in userGroups)
{ 
   if(adminGroupMembers.Contains(group))
   {
      IsUserAdmin = true;
      break;
   }
}

答案 1 :(得分:1)

这将有助于判断它们是否属于管理员组:

    WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    return principal.IsInRole(WindowsBuiltInRole.Administrator);