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);
}
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:
- Gestion des principaux de sécurité D'annuaire dans. NET Framework 3.5
- MSDN docs sur le système.DirectoryServices.Gestion de comptes
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!
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
}
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