2009-09-04 23 views

Répondre

4

Êtes-vous sur .NET 3.5 ??

Si tel est le cas, consultez cet excellent article MSDN Managing Directory Security Principals in the .NET Framework 3.5 qui présente la nouvelle fonctionnalité de gestion des utilisateurs et des groupes dans .NET 3.5.

Dans ce cas, vous avez besoin d'un contexte principal (par exemple votre domaine):

PrincipalContext domainContext = 
    new PrincipalContext(ContextType.Domain, "YourDomain"); 

et vous pouvez trouver assez facilement l'utilisateur:

UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, "username"); 

et l'objet "UserPrincipal" a une méthode appelée « GetAuthorizationGroups » qui renvoie tous les groupes auxquels l'utilisateur est un membre de:

PrincipalSearchResult<Principal> results = user.GetAuthorizationGroups(); 

// display the names of the groups to which the 
// user belongs 

foreach (Principal result in results) 
{ 
    Console.WriteLine("name: {0}", result.Name); 
} 

P retty facile, hein?

C'est beaucoup plus de travail dans .NET avant 3.5, ou dans LDAP "direct" d'une autre langue (PHP, Delphi, etc.).

Marc

+0

Fonctionne bien! Merci beaucoup. – Donut

1

Voici une autre façon d'obtenir les informations de groupe:

Assurez-vous d'ajouter une référence pour System.DirectoryServices.

DirectoryEntry root = new DirectoryEntry("LDAP://OU=YourOrganizationOU,DC=foo,DC=bar"); 

DirectoryEntry user = GetObjectBySAM("SomeUserName", root); 

if (user != null) 
{ 
    foreach (string g in GetMemberOf(user)) 
    { 
    Console.WriteLine(g); 
    } 
} 

Les méthodes suivantes obtiennent l'entrée de l'utilisateur et renvoient une liste de chaînes qui sont les groupes dont l'utilisateur est membre.

public List<string> GetMemberOf(DirectoryEntry de) 
{ 
    List<string> memberof = new List<string>(); 

    foreach (object oMember in de.Properties["memberOf"]) 
    { 
    memberof.Add(oMember.ToString()); 
    } 

    return memberof; 
} 

public DirectoryEntry GetObjectBySAM(string sam, DirectoryEntry root) 
{ 
    using (DirectorySearcher searcher = new DirectorySearcher(root, string.Format("(sAMAccountName={0})", sam))) 
    { 
    SearchResult sr = searcher.FindOne(); 

    if (!(sr == null)) return sr.GetDirectoryEntry(); 
    else 
     return null; 
    } 
}