2008-09-09 12 views

Répondre

2

Je ne sais pas .Net, mais win32, le plus simple est d'appeler IsUserAnAdmin(). Si vous avez besoin d'un plus grand contrôle, vous pouvez ouvrir le jeton de processus et de vérifier avec CheckTokenMembership pour chaque groupe, vous devez vérifier

Edit: Voir pinvoke.net pour exemple de code .NET (Merci chopeen)

1

Vous pouvez boucle les groupes comme je l'ai fait dans cette réponse:

Determining members of local groups via C#

Après avoir lu un peu plus, serait la chose la plus facile à utiliser l'espace de noms System.DirectoryServices.AccountManagement. Voici comment il peut être utilisé:

http://www.leastprivilege.com/SystemDirectoryServicesAccountManagement.aspx

Exemple:

public static bool IsUserInGroup(string username, string groupname, ContextType type) 
{ 
    PrincipalContext context = new PrincipalContext(type); 

    UserPrincipal user = UserPrincipal.FindByIdentity(
     context, 
     IdentityType.SamAccountName, 
     username); 
    GroupPrincipal group = GroupPrincipal.FindByIdentity(
     context, groupname); 

    return user.IsMemberOf(group); 
} 
+0

L'espace de noms System.DirectoryServices.AccountManagement est nouveau pour .NET 3.5, n'est-ce pas? –

+0

Première phrase de l'article lié: "En parcourant quelques-uns des nouveaux composants 3.5, je suis tombé sur un nouvel assemblage nommé" System.DirectoryServices.AccountManagement ", qui a attiré mon attention." – Espo

+0

Désolé, j'ai raté. Pourriez-vous ajouter l'information CheckTokenMembership à votre réponse pour la compléter (pour que je puisse la marquer comme réponse acceptée)? –

2

Il y a un Win32 API pour cela, vous pouvez P/Invoke: IsUserAnAdmin

La question est plus complexe sur Vista ... voir ce blog post.

+0

"La fonction IsUserAnAdmin est un wrapper pour CheckTokenMembership Il est recommandé d'appeler directement cette fonction pour déterminer le statut du groupe Administrateur plutôt que d'appeler IsUserAnAdmin". (De la page liée) – Espo

+0

Je n'avais pas remarqué l'avertissement avant. Je me demande pourquoi Microsoft envisagerait de désapprouver une telle aide plus simple ... heureusement, ils ont un bon dossier pour la rétrocompatibilité. –

0

Si vous parlez de l'utilisateur j'attends en cours d'exécution alors

using System.Security.Principal; 

WindowsIdentity identity = WindowsIdentity.GetCurrent(); 
WindowsPrincipal wp = new WindowsPrincipal(identity); 

if (wp.IsInRole("BUILTIN\Administrators")) 
    // Is Administrator 
else 
    // Is Not 

Sinon, il est possible de définir l'identité à un utilisateur particulier, mais pas moins examiné comment.

Questions connexes