Fast Tricks: Obtener Grupos de Usuario AD DirectoryServices 3.5

Published 27/11/2009 10:20 | Isaac Fernandez

Siguiendo con esta serie de articulos sobre tips rápidos para solucionar de forma optima y rápida casos concretos, os dejo un par de lineas rápidas para encontrar de forma óptima y recursiva todos los posibles grupos y subGrupos de un Usuario de Directorio Activo, con DirectoryServices 3.5.

public static List<string> GetGruposUsuarioActiveDirectory(string Usuario)

        {

            List<string> roles = new List<string>();           

            string nombreDominio = "MyDomain";

            using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, nombreDominio))

            {

                UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(ctx, Usuario);

                if (userPrincipal != null)

                {

                    foreach (Principal p in userPrincipal.GetGroups())

                    {

                        roles.Add(p.Name);

                    } userPrincipal.Dispose();

                 }

            }

            return roles;

        }

 Edit: La recursividad como comentaba en un comentario más abajo, podemos obtenerla simplemente llamando a esta función de forma recursiva (valga la redundancia), o simplemente, en vez de utilizar el método GetGroups, se utilizará  GetAuthorizationGroups

Archivado en:
Comparte este post:

Comentarios

# Anonimo said on November 27, 2009 10:37 AM:

Que guay! Lo voy a utilizar ahora mismo y seguro que a mis jefes se les cae la baba.

# Isaac Fernandez said on November 27, 2009 10:39 AM:

ya será menos ;)

# Luis Miguel Blanco said on November 27, 2009 11:14 AM:

Hola Isako

Fenomenal truco si señor 8-)

Saludotes,

Luismi

# Isaac Fernandez said on November 27, 2009 11:20 AM:

Gracias Maestro, siempre está bien tener este tipo de cosas bien localizada para un copyPaste rápido :)

# Francisco Nieto said on November 30, 2009 9:29 AM:

Pero creo que se podría mejorar un pelín añadiendo recursividad.

A veces el usuario no pertenece directamente al grupo que deseamos comprobar, sino que pertenece a un grupo de personas que tienen ese rol (por ejemplo, el usuario pertenece al grupo Contabilidad y a su vez el grupo Contabilidad pertenece al grupo APP_GESTION_LECTURA que el que realmente tenemos que reconocer como rol de nuestra aplicacion).

Este tipo de estructuras de AD no es extraño encontrarlas, que la pertenencia no sea directa sino por herencia.

# Isaac Fernandez said on November 30, 2009 9:42 AM:

Hola Francisco, la recursividad la podemos obtener simplemente llamando a esta función de forma recursiva (valga la redundancia), o simplemente, en vez de utilizar el método GetGroups, se utilizará  GetAuthorizationGroups

# dohko said on March 15, 2010 2:19 PM:

siempre es bueno que incluyan de donde son todos esos metodos, de que libreria son todas esas clases?

# Isaac Fernandez said on March 15, 2010 3:17 PM:

Hola dohko, son de System.DirectoryServices

msdn.microsoft.com/.../system.directoryservices.aspx

# Henry Ruiz said on July 4, 2010 5:22 PM:

Muchas graciaspor tu ayuda

Dios te bendiga