2013-01-11 49 views
0

我有验证用户是否存在于本地计算机管理员组中的代码。如果用户是在管理员组检查用户是否属于管理员组 - C#

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年

+0

什么版本的Windows。在Windows XP中这样做的过程会有所不同,然后说Windows Vista和更高版本。 –

+0

我需要在Windows Server 2008,2008 R2,2012和2012 R2上验证用户。 –

回答

1

为什么不直接找到所有用户的AD组,然后检查是否在管理员组存在像以前一样组的代码工作的?您可以按照解决方案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; 
    } 
} 
相关问题