2011-07-27 5 views
10

Où puis-je trouver un exemple qui effectue les opérations suivantes?Autorisations utilisateur/groupe dans Active Directory

  1. Extrait un utilisateur d'Active Directory.
  2. Obtient les groupes dont l'utilisateur est membre.
  3. Obtient une liste des autorisations affectées à chaque groupe.

Cela semble être une tâche simple, mais je ne trouve pas de solution.

L'objectif général est d'attribuer des autorisations personnalisées et de les utiliser pour contrôler les droits dans une application.

+0

quelle langue ?? – TheGeekYouNeed

+0

J'utilise des API Active Directory dans .NET/C#. – user802165

Répondre

13

Si vous utilisez .NET 3.5 et versions ultérieures, vous devez consulter l'espace de noms System.DirectoryServices.AccountManagement (S.DS.AM). À lire ici:

Fondamentalement, vous pouvez définir un contexte de domaine et de trouver facilement les utilisateurs et/ou groupes AD:

// 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 
    } 
} 

Le nouveau S.DS.AM, il est vraiment facile de jouer avec les utilisateurs et les groupes dans AD!

Le dernier point: les autorisations. Ceux-ci ne sont pas stockés dans Active Directory - et par conséquent, vous ne pouvez pas les récupérer à partir de n'importe quel code AD.

Les autorisations sont stockées sur les éléments de système de fichiers individuels, par ex. fichiers et/ou répertoires - ou d'autres objets (comme les clés de registre, etc.). Lorsque vous avez un compte AD ou un compte d'utilisateur, vous pouvez lire sa propriété SID (Security Identifier) ​​- ce SID apparaîtra dans ACL (Access Control Lists) partout dans Windows - mais de l'utilisateur ou du groupe, il n'y a pas de mécanisme pour obtenir autorisations qu'il pourrait avoir n'importe où dans la machine/serveur.

Les autorisations pour les fichiers et les répertoires peuvent, par ex. être récupéré à l'aide de la méthode .GetAccessControl() sur les FileInfo et DirectoryInfo cours:

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

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

Décrypter et donner un sens de ceux qui est une toute autre histoire tout à fait!

+0

C'était ma suspicion. Merci de votre aide. – user802165