0

我有代码来验证用户是否存在于本地计算机的管理员组中。如果用户直接存在于管理员组中,则代码可以正常工作

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 上运行

4

2 回答 2

2

为什么不直接找到用户的所有 AD 组,然后像以前一样检查该组是否存在于 Administrators 组中?您可以按照此处的解决方案找到用户的所有 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;
   }
}
于 2013-01-11T19:30:04.547 回答
2

这可以判断他们是否属于管理员组:

    WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    return principal.IsInRole(WindowsBuiltInRole.Administrator);
于 2019-11-05T15:43:56.450 回答