Если вы используете .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();
Расшифровывать и понимать их - это совсем другая история!