Comment vérifier si un utilisateur appartient à un groupe AD?

Au début, je pensais que le code ci-dessous fonctionne parce que si le groupe est “IT”, il fonctionne correctement car mon nom d’utilisateur se trouve dans le groupe informatique du répertoire actif. Ce que j’ai appris, c’est qu’il retourne toujours vrai si j’ai mon identifiant dans le groupe informatique ou non et si je le change en un autre groupe, je suis retourné renvoie toujours faux. Toute aide serait appréciée.

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) { // tab control security for admin tab bool admin = checkGroup("IT"); if ((admin == true) && (tabControl1.SelectedTab == tpHistory)) { tabControl1.SelectedTab = tpHistory; } else if ((admin == false) && (tabControl1.SelectedTab == tpHistory)) { tabControl1.SelectedTab = tpRequests; MessageBox.Show("Unable to load tab. You have insufficient privileges.", "Access Denied", MessageBoxButtons.OK, MessageBoxIcon.Stop); } } // check active directory to see if user is in Marketing department group private static bool checkGroup(ssortingng group) { WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); return principal.IsInRole(group); } 

Étant donné que vous êtes sur .NET 3.5 et versions ultérieures, vous devez extraire l’espace de noms System.DirectoryServices.AccountManagement (S.DS.AM). Lisez tout a propos de ça ici:

  • Gestion des principaux de sécurité de répertoire dans .NET Framework 3.5
  • Documents MSDN sur System.DirectoryServices.AccountManagement

Fondamentalement, vous pouvez définir un contexte de domaine et trouver facilement des utilisateurs et / ou des groupes dans AD:

 // set up domain context PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DOMAINNAME"); // find a user UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName"); // find the group in question GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere"); if(user != null) { // check if user is member of that group if (user.IsMemberOf(group)) { // do something..... } } 

Le nouveau S.DS.AM permet de jouer facilement avec les utilisateurs et les groupes dans AD!

Légère déviation de l’exemple @marc_s, implémentée dans la méthode static void Main() dans Program :

 DomainCtx = new PrincipalContext( ContextType.Domain , Environment.UserDomainName ); if ( DomainCtx != null ) { User = UserPrincipal.FindByIdentity( DomainCtx , Environment.UserName ); } 

DomainCtx et User sont deux propriétés statiques déclarées sous Program

Ensuite, sous d’autres formes, je fais simplement quelque chose comme ceci:

 if ( Program.User.IsMemberOf(GroupPrincipal.FindByIdentity(Program.DomainCtx, "IT-All") )) { //Enable certain Form Buttons and objects for IT Users } 

Vous ne pouvez pas le faire de cette façon. Vous devriez interroger le répertoire actif. Vous pouvez utiliser un wrapper pour AD. Découvrez http://www.codeproject.com/Articles/10301/Wrapper-API-for-using-Microsoft-Active-Directory-S