2012-04-20 4 views
8

voglio ottenere l'elenco dei gruppi cui l'utente è inOttenere l'elenco dei gruppi per il dato UserPrincipal

Questo è il mio codice:.

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain.ac.uk", "DC=mydomain,DC=AC,DC=UK", "user", "password"); 

UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUser"); 

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

foreach(Principal p in results) 
{ 
    Response.Write(p.Name); 
} 

Quando corro, ho ottenuto il seguente errore sulla linea Response.Write(p.Name);

System.Runtime.InteropServices.COMException: l'attributo o il valore del servizio directory specificato non esiste.

Quando ho controllato il conteggio dei risultati, ha restituito 9 e il primo gruppo è DomainUsers.

Come è possibile ripetere tutti i 9 gruppi nell'elenco? Grazie.

Quello che segue è l'elenco degli utenti ottengo:

enter image description here

+0

come inizializzare PrincipalContext? – Damith

+0

PrincipalContext ctx = new PrincipalContext (ContextType.Domain, "mydomain.ac.uk", "DC = mydomain, DC = AC, DC = UK", "user", "password"); – TTCG

+0

L'attributo nome potrebbe non essere stato popolato (forse perché proveniva da un dominio diverso da quello interrogato ??). Prova a chiedere DisplayName o DistinguishedName o SamAccountName o SID. – Ben

risposta

1

provare qualcosa di simile

foreach(Principal p in results) 
{ 
    if (p is GroupPrincipal) 
     Response.Write(p.DisplayName); 
} 

So che può sembrare stupido, ma ha lavorato per me in passato. I tuoi risultati sembrano aver trovato solo 1 gruppo di sicurezza e 8 "altri" tipi di gruppi. Questi "altri" gruppi potrebbero non possedere questi attributi.

+0

Per me, il nome era migliore (DisplayName era vuoto: 'user.GetGroups(). OfType (). Select (p => p.Name));' –

5

Quando omettendo la proprietà del contenitore LDAP come descritto nel PrincipalContext Class, l'utente che esegue il codice deve avere autorizzazioni di lettura sia per l'impostazione predefinita User Container (vale a dire CN=Users,DC=yourDomain,DC=COM) e il Computers Container (vale a dire CN=Computers,DC=yourDomain,DC=COM).

Se l'utente non dispone delle autorizzazioni necessarie si ottengono i seguenti messaggi di errore:

L'attributo di servizio di directory specificata o valore non esiste

  • 'context.Container' gettato un'eccezione di tipo stringa "System.NullReferenceException" {System.NullReferenceException}

  • ((nuovo System.Linq.SystemCo re_EnumerableDebugView (gruppi)). I prodotti [5]). Descrizione' ha generato un'eccezione di tipo 'System.Runtime.InteropServices.COMException' stringa {} System.Runtime.InteropServices.COMException

Per favore controlla il mio post sul blog Authentication Problems with PrincipalContext

+0

Se qualcuno elimina il contenitore di computer nel dominio in domanda, riceverai anche questo errore. Per l'amor del cielo ... Qualcuno ha cancellato la cosa. –

+0

Chiunque tenti di utilizzare 'this.RequestContext.Principal.IsInRole (" nome del gruppo di annunci ")' e restituisce sempre false senza eccezione generata, questa è una possibile causa. Ripristino del CN ​​e le autorizzazioni hanno risolto questo problema per me. –