Comment vérifier si un utilisateur appartient à un groupe d'ANNONCES?

Au début, je pensais que le code ci-dessous fonctionne parce que si j'ai le groupe comme "IT" Il fonctionne correctement parce que mon nom d'utilisateur est dans le groupe informatique dans active directory. Ce que j'ai appris, c'est qu'il retourne toujours vrai si j'ai mon nom d'utilisateur dans le groupe informatique ou non et si je le change pour un autre groupe dans lequel je suis, il renvoie toujours false. 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(string group)
    {
        WindowsIdentity identity = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(identity);
        return principal.IsInRole(group);
    }
41
demandé sur Ruben Steins 2012-08-19 23:36:31

3 réponses

Puisque vous êtes sur. net 3.5 et plus, vous devriez vérifier le System.DirectoryServices.AccountManagement (S.DS.AM) espace de noms. Lisez tout à ce sujet ici:

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 il est vraiment facile de jouer avec les utilisateurs et les groupes dans AD!

88
répondu marc_s 2012-08-20 04:38:29

Léger écart par rapport à l'exemple @marc_s, implémenté 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 les deux propriétés statiques déclaré en vertu de l' 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

}
9
répondu GoldBishop 2014-01-24 21:07:07

Vous ne pouvez pas le faire de cette façon. Vous devez interroger active directory. Vous pouvez utiliser un wrapper pour AD. Regarde http://www.codeproject.com/Articles/10301/Wrapper-API-for-using-Microsoft-Active-Directory-S

0
répondu İbrahim ULUDAĞ 2012-08-19 19:44:16