2009-05-22 7 views
0

Comment puis-je détecter si un utilisateur arbitraire est un administrateur sur une machine? J'ai le domaine et le nom d'utilisateur de l'utilisateur mais pas le mot de passe. L'utilisateur n'est PAS l'utilisateur actuellement connecté, donc je ne peux pas simplement utiliser WindowsIdentity.GetCurrent.Détecter si l'utilisateur fait partie d'un groupe

Répondre

1

Utilisez LDAP. Voir les exemples here.

+0

Parfait, merci. –

0

Vous pouvez utiliser System.DirectoryServices pour charger d'abord l'ordinateur local, puis rechercher les utilisateurs d'un groupe donné. Essayez le code suivant:

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

puis créer un nouveau DirectoryEntry pour chaque élément dans les éléments de l'objet:

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

l'objet membre à l'intérieur de cette boucle foreach est présente une charge de données relatives à l'utilisateur à l'intérieur. Comparez le nom de votre membre avec l'actuel dans la boucle:

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

Vous pouvez également rechercher par les membres objectera pour trouver l'utilisateur, etc. Il y a beaucoup de façons de le faire. J'espère que cela t'aides!

2

En utilisant UserPrincipal.GetAuthorizationGroups pour vérifier si l'utilisateur est dans un groupe autorisé à accéder à l'ordinateur.

Obtenez d'abord un objet UserPrincipal à l'aide de FindByIdentity. Ensuite, récupérez les groupes d'autorisations dont l'utilisateur est membre. Vérifiez chaque groupe pour voir s'il correspond au groupe des administrateurs intégrés. Si le groupe des administrateurs intégrés n'est pas dans les groupes d'autorisation de l'utilisateur, l'utilisateur n'est pas un administrateur sur la machine locale.

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); 
Questions connexes