2009-05-22 73 views
0

如何檢測任意用戶是否是機器上的管理員?我有用戶的域名和用戶名,但沒有密碼。用戶不是當前登錄的用戶,所以我不能只使用WindowsIdentity.GetCurrent。檢測用戶是否在組中

回答

1

使用LDAP。見例here

+0

完美,謝謝。 – 2009-05-22 18:46:56

0

您可以使用System.DirectoryServices首先加載本地計算機,然後搜索給定組內的任何用戶。嘗試以下代碼:

DirectoryEntry localMachine = new DirectoryEntry("WinNT://" + Environment.MachineName); 
DirectoryEntry admGroup = localMachine.Children.Find("administrators","group"); 
object members = admGroup.Invoke("members", null); 

然後在部件的每個成員創建一個新的DirectoryEntry對象:

foreach (object groupMember in (IEnumerable)members) 
{ 
    DirectoryEntry member = new DirectoryEntry(groupMember); 
    //Do what you want 
} 

該foreach循環的內部的構件對象是具有數據的關於用戶的負載在裏面。與當前的循環比較的成員的名字:

if (memberSearch.name == member.name) { 
    return true; 
} else { 
    return false; 
} 

你也可以通過搜索成員對象找到用戶等方面有大量的做這件事的方式。希望這可以幫助!

2

使用UserPrincipal.GetAuthorizationGroups檢查用戶是否在允許管理員訪問機器的組中。

首先使用FindByIdentity獲取UserPrincipal對象。然後獲取該用戶所屬的授權組。檢查每個組以查看是否與內置管理員組相匹配。如果內置管理員組不在用戶的授權組中,則該用戶不是本地計算機上的管理員。

using System.DirectoryServices.AccountManagement; 
using System.Linq; 

var name = Environment.UserName; 
var user = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), name); 
var groups = user.GetAuthorizationGroups(); 
var isAdmin = groups.Any(g => g.Name == "Administrators");  
Console.WriteLine("Admin: " + isAdmin);