2011-07-27 23 views
10

¿Dónde puedo encontrar un ejemplo que haga lo siguiente?Permisos de usuario/grupo en Active Directory

  1. Extrae a un usuario de Active Directory.
  2. Obtiene los grupos a los que pertenece el usuario.
  3. Obtiene una lista de permisos asignados a cada grupo.

Esto parece una tarea simple pero no puedo encontrar una solución.

El objetivo general es asignar permisos personalizados y usarlos para controlar los derechos dentro de una aplicación.

+0

¿qué idioma? – TheGeekYouNeed

+0

Estoy usando las API de Active Directory en .NET/C#. – user802165

Respuesta

13

Si tiene .NET 3.5 y superior, debe verificar el espacio de nombres System.DirectoryServices.AccountManagement (S.DS.AM). Leer todos los detalles aquí:

Básicamente, se puede definir un contexto de dominio y encontrar fácilmente los usuarios y/o grupos en el año:

// set up domain context 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// find a user 
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName"); 

if(user != null) 
{ 
    // do something here....  
} 

// find the group in question 
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere"); 

// if found.... 
if (group != null) 
{ 
    // iterate over members 
    foreach (Principal p in group.GetMembers()) 
    { 
     Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName); 
     // do whatever you need to do to those members 
    } 
} 

El ¡El nuevo S.DS.AM hace que sea muy fácil jugar con usuarios y grupos en AD!

El último punto: permisos. Esos no están almacenados en Active Directory, y por lo tanto, no puede recuperarlos de ningún código AD.

Los permisos se almacenan en los elementos individuales del sistema de archivos, p. archivos y/o directorios u otros objetos (como claves de registro, etc.). Cuando tiene un grupo AD o una cuenta de usuario, puede leer su propiedad SID (identificador de seguridad): ese SID aparecerá en las listas de control de acceso de ACL en todo Windows, pero del usuario o grupo no existe un mecanismo para obtener todo permisos que podría tener en cualquier lugar de la máquina/servidor.

Los permisos para archivos y directorios pueden p. Ej. ser recuperados utilizando el método .GetAccessControl() en las clases FileInfo y DirectoryInfo:

FileInfo info = new FileInfo(@"D:\test.txt"); 
FileSecurity fs = info.GetAccessControl(); 

DirectoryInfo dir = new DirectoryInfo(@"D:\test\"); 
DirectorySecurity ds = dir.GetAccessControl(); 

de desciframiento y dar sentido a los que es una historia completamente diferente por completo!

+0

Esa era mi sospecha. Gracias por tu ayuda. – user802165

Cuestiones relacionadas