2013-01-11 80 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; 
    } 
} 
相關問題