2012-04-20 18 views
8

Quiero obtener la lista de grupos que el usuario está enObtener la lista de grupos para la dada UserPrincipal

Este es mi código:.

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); 
} 

Cuando corro, tiene la siguiente error en la línea Response.Write(p.Name);

System.Runtime.InteropServices.COMException: El atributo o valor del servicio de directorio especificado no existe.

Cuando revisé el recuento de los resultados, devolvió 9 y el primer grupo es DomainUsers.

¿Cómo puedo iterar los 9 grupos en la lista? Gracias.

La siguiente es la lista de usuarios consigo:

enter image description here

+0

cómo inicializa PrincipalContext? – Damith

+0

PrincipalContext ctx = new PrincipalContext (ContextType.Domain, "mydomain.ac.uk", "DC = mydomain, DC = AC, DC = UK", "usuario", "contraseña"); – TTCG

+0

Es posible que el atributo de nombre no se haya rellenado (¿tal vez porque pertenecía a un dominio diferente al que consultó?). Intente solicitar DisplayName o DistinguishedName o SamAccountName o SID. – Ben

Respuesta

1

intentar algo así como

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

Sé que suena tonto, pero ha funcionado para mí en el pasado. Sus resultados parecen que solo encontró 1 grupo de seguridad y 8 "otros" tipos de grupos. Esos "otros" grupos pueden no poseer esos atributos.

+0

Para mí, el nombre era mejor (DisplayName estaba vacío: 'user.GetGroups(). OfType (). Select (p => p.Name));' –

5

Cuando omitiendo la propiedad recipiente LDAP como se describe en PrincipalContext clase, el usuario que ejecuta el código debe tener permisos de lectura tanto a la forma predeterminada User Container (es decir CN=Users,DC=yourDomain,DC=COM) y la Computers Container (es decir CN=Computers,DC=yourDomain,DC=COM).

Si el usuario no tiene los permisos requeridos obtendrá los siguientes mensajes de error:

El atributo de servicio o el valor no existe

  • 'context.Container' tiró una excepción del tipo 'System.NullReferenceException' cadena {System.NullReferenceException}

  • ((new System.Linq.SystemCo re_EnumerableDebugView (grupos)). Los productos [5]). Descripción' produjo una excepción de tipo 'System.Runtime.InteropServices.COMException' cadena {System.Runtime.InteropServices.COMException}

Por favor revise mi entrada en el blog Authentication Problems with PrincipalContext

+0

Si alguien elimina el contenedor de las computadoras en el dominio de pregunta, usted recibirá este error también. Por el amor de Dios ... Alguien borró la cosa. –

+0

Cualquiera que intente usar 'this.RequestContext.Principal.IsInRole (" nombre del grupo de anuncios ")' y siempre devuelve falso sin excepción, esta es una posible causa. Restaurar el CN ​​y los permisos me solucionó esto. –

Cuestiones relacionadas