2009-05-22 5 views
0

Wie erkenne ich, ob ein beliebiger Benutzer ein Administrator auf einer Maschine ist? Ich habe die Domain und den Benutzernamen des Benutzers, aber kein Passwort. Der Benutzer ist NICHT der aktuell angemeldete Benutzer, daher kann ich nicht einfach WindowsIdentity.GetCurrent verwenden.Erkennen, ob der Benutzer in einer Gruppe ist

Antwort

1

LDAP verwenden. Siehe Beispiele here.

+0

Perfekt, danke. –

0

Sie können System.DirectoryServices verwenden, um zuerst den lokalen Computer zu laden und anschließend nach Benutzern in einer bestimmten Gruppe zu suchen. Versuchen, den folgenden Code aus:

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

dann ein neues Directory für jedes Mitglied in der Mitglieder-Objekt erstellen:

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

Das Element-Objekt in dieser foreach Schleife ist eine Last von Daten über den Benutzer aufweist im Inneren. Vergleichen Sie die Mitgliedsnamen mit dem aktuellen in der Schleife:

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

Sie auch durch die Mitglieder suchen konnte Objekt um den Benutzer zu finden usw. Es gibt viele Möglichkeiten, es zu tun. Hoffe das hilft!

2

Mit UserPrincipal.GetAuthorizationGroups überprüfen, ob der Benutzer in einer Gruppe ist, die administrativen Zugriff auf den Computer erlaubt.

Erhalte zuerst ein UserPrincipal-Objekt mit FindByIdentity. Rufen Sie dann die Autorisierungsgruppen ab, bei denen der Benutzer Mitglied ist. Überprüfen Sie jede Gruppe, um festzustellen, ob sie mit der Gruppe der integrierten Administratoren übereinstimmt. Wenn sich die Gruppe der integrierten Administratoren nicht in den Berechtigungsgruppen des Benutzers befindet, ist der Benutzer kein Administrator auf dem lokalen Computer.

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); 
Verwandte Themen