2009-12-29 1 views
5

Come posso ottenere l'appartenenza ai gruppi di un utente da AD, preferibilmente utilizzando lo stesso pattern che utilizzo per ottenere la proprietà Department dell'utente, come di seguito? Ho trovato diversi esempi, ma l'insieme di intersezione di tutte le tecniche di esempio è piuttosto piccolo, e manca la tenuta e la semplicità di questa query Dipartimento:Ottenere l'appartenenza a un gruppo di un utente da Active Directory

 var adServer = ConfigurationManager.AppSettings["adServer"] ?? "localhost"; 
     var remoteRoot = new DirectoryEntry(GetRootPath(adServer)); 
     var searcher = new DirectorySearcher(remoteRoot, string.Format("(SAMAccountName={0})", shortUserName)); 

     searcher.PropertiesToLoad.Add("Department"); 
     SearchResult result = null; 
     result = searcher.FindOne(); 

risposta

6

Sei su .NET 3.5? Se è così, è molto facile:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN"); 

string userName = "yourUser"; 

UserPrincipal user = UserPrincipal.FindByIdentity(ctx, userName); 

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

Trova l'utente, e quindi chiamare il .GetAuthorizationGroups() sul principale utente - che restituisce tutti i gruppi cui appartiene l'utente, tra cui il suo gruppo primario, e qualsiasi appartenenza ai gruppi nidificati.

Dai un'occhiata a questo MSDN article per ulteriori novità in .NET 3.5 quando si tratta di gestire l'annuncio.

In .NET 2.0, le cose sono molto più pacchiane ...

+0

Grazie. Funziona a metà, ma ricevo un errore "Impossibile accedere alle informazioni sul dominio" (qualcosa di simile) quando chiamo GetAuthorizationGroups() – ProfK

+0

hai specificato il nome del tuo dominio NetBIOS durante la costruzione del contesto principale? Per esempio. "YOURDOMAIN", anziché "yourcompany.com"? –

+0

funziona per me. Mi ha salvato un sacco di lavoro! Grazie – paul