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
Que guay! Lo voy a utilizar ahora mismo y seguro que a mis jefes se les cae la baba.
ya será menos 😉
Hola Isako
Fenomenal truco si señor 😎
Saludotes,
Luismi
Gracias Maestro, siempre está bien tener este tipo de cosas bien localizada para un copyPaste rápido 🙂
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.
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
siempre es bueno que incluyan de donde son todos esos metodos, de que libreria son todas esas clases?
Hola dohko, son de System.DirectoryServices
http://msdn.microsoft.com/en-us/library/system.directoryservices.aspx
Muchas graciaspor tu ayuda
Dios te bendiga