Права пользователя / группы в Active Directory - PullRequest
11 голосов
/ 28 июля 2011

Где найти пример, который выполняет следующие действия?

  1. Извлекает пользователя из Active Directory.
  2. Получает группы, в которые входит пользователь.
  3. Получает список разрешений, назначенных каждой группе.

Это кажется простой задачей, но я не могу найти решение.

Общая цель - назначить настраиваемые разрешенияи использовать их для контроля прав в приложении.

1 Ответ

14 голосов
/ 28 июля 2011

Если вы используете .NET 3.5 и выше, вы должны проверить пространство имен System.DirectoryServices.AccountManagement (S.DS.AM). Читайте все об этом здесь:

По сути, вы можете определить контекст домена и легко находить пользователей и / или группы в 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
   }
}

Новый S.DS.AM позволяет очень легко играть с пользователями и группами в AD!

Последний пункт: разрешения. Они не хранятся в Active Directory - и, следовательно, вы не можете получить их из любого кода AD.

Разрешения хранятся для отдельных элементов файловой системы, например, файлы и / или каталоги - или другие объекты (например, ключи реестра и т. д.). Когда у вас есть группа AD или учетная запись пользователя, вы можете прочитать ее свойство SID (идентификатор безопасности) - этот SID будет отображаться в ACL (списки контроля доступа) по всей Windows - но от пользователя или группы не существует механизма для получения всех разрешения, которые он может иметь где-либо на машине / сервере.

Разрешения для файлов и каталогов могут, например, быть извлечены с использованием метода .GetAccessControl() в классах FileInfo и DirectoryInfo:

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

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

Расшифровывать и понимать их - это совсем другая история!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...