2011-07-26 1 views
2

J'utilise ci-dessous morceau de code pour vérifier si un utilisateur donné fait partie du groupe de distribution dans AD.comment vérifier si un utilisateur est membre de la liste de distribution/groupe de sécurité dans AD C#

static bool IsUserMemberOf(string userName, string groupName) 
{ 
    using (var ctx = new PrincipalContext(ContextType.Domain)) 
    using (var groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName)) 
    using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName)) 
    { 
    return userPrincipal.IsMemberOf(groupPrincipal); 
    } 
} 

j'appelle méthode ci-dessus avec des valeurs comme IsUserMemberOf("domain\\username","domain\\groupname") Mais je vois une exception de pointeur nul parce groupPrincipal est ayant une valeur nulle.

Toute aide à cet égard?

+1

Votre code fonctionne sur mon système. Etes-vous sûr que domain \\ groupname est un groupe valide dans le contexte que vous utilisez? Il pourrait être intéressant d'examiner 'ctx.ConnectedServer' pour s'assurer que vous êtes connecté au domaine auquel vous vous attendez à être connecté. Vous pouvez également essayer d'utiliser un nom de groupe différent simplement pour vérifier si votre code échoue avec cela. La fonction 'userPrincipal.GetGroups()' vous donnerait une liste de noms que vous pourriez utiliser. –

+0

J'ai aussi essayé votre code et ça marche aussi pour moi. J'ai omis la partie \\ domaine à partir du nom d'utilisateur et du nom de groupe. –

+0

En outre, y a-t-il une chance que votre utilisateur ne soit pas dans le même domaine que le groupe interrogé? Votre méthode ne fonctionnera pas si c'est le cas. Malheureusement, je n'ai pas de solution à ce problème. J'ai eu un problème similaire et je n'ai jamais trouvé de réponse suffisante. – RLH

Répondre

0

En fait, mon groupe est dans un domaine différent de l'utilisateur que je demande: J'ai fait ci-dessous le changement à mon programme et fonctionne maintenant.

et je vous appelle comme ceci:

IsUserMemberOf("domain1\\username","domain2\\groupname") 


static bool IsUserMemberOf(string userName, string groupName) 
{ 
using (var ctx = new PrincipalContext(ContextType.Domain,"domain1")) 
using (var groupPrincipal = GroupPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain,"domain2"), groupName)) 
using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName)) 
{ 
    return userPrincipal.IsMemberOf(groupPrincipal); 
} 

}

1

Il y a signifie simplement que:

groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName)) 

Renvoie un pointeur NULL parce que votre groupe n'est pas présent dans votre domaine. Vous avez juste à tester votre var ctx, userPrincipal et groupPrincipal.

Questions connexes