2015-06-19 2 views
0

Я недавно начал изучать C# для проекта на работе, который должен написать обновленный инструмент создания пользователя, чтобы заменить наш старый инструмент vbscript. До сих пор я заполнил все стороны Active Directory, но у меня возникают проблемы с папкой ACL при создании папки профиля.C# Папка ACL не применяется

Я успешно выполнил функцию удаления всех списков ACL и начал с нуля, но моя функция добавления ACL в папку не работает. Вот функция:

public void CreateFolderACL(string FolderPath, string Account, FileSystemRights Rights, AccessControlType ControlType) 
    { 
     try 
     { 
      DirectorySecurity fs = Directory.GetAccessControl(FolderPath); 
      AuthorizationRuleCollection rules = fs.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)); 
      fs.AddAccessRule(new FileSystemAccessRule(@"domain\" + Account, Rights, ControlType)); 
      Directory.SetAccessControl(FolderPath, fs); 
     } 
     catch(Exception E) 
     { 
      Console.WriteLine(E); 
     } 
    } 

Когда я труба в чем-то вроде

CreateFolderACL(userData["ProfilePath"] + ".v2", "Domain Admins", FileSystemRights.FullControl, AccessControlType.Allow);

Это создает запись в папке, но не имеет прав установлены (см скриншот ниже), и он не установлен любые другие разрешения, которые я пытаюсь применить вместе с админами домена.

http://i.stack.imgur.com/Iul1i.png

Я новичок в этом, и это моя первая реальная программа, но я ударил загвоздка и не могу понять, что происходит.

Специфическая ошибка: System.Security.Principal.IdentityNotMappedException: Some or all identity references could not be translated.

ответ

0

Спасибо за ответ.

Просто обновление, я немного поиграл с ним, и получается, что «некоторые или все ссылки на идентификаторы не могут быть переведены». на самом деле сообщение было попыткой добавить разрешения для только что созданной учетной записи пользователя и не удалось найти пользователя.

После того, как я прокомментировал это и только проверил добавление разрешений админов домена, он завершает выполнение без ошибок, но та же проблема возникает. Администраторы домена добавляются как разрешение, но проверяются только «специальные разрешения», что означает, что полный контроль не применяется.

Без сообщений об ошибках Я не могу понять, почему это происходит. Я думал, что это могло быть потому, что я удаляю все ACL, прежде чем применять новые, поэтому я попытался создать папку и добавить разрешения Domain Admins, не удаляя сначала все ACL, и то же самое происходит.

Несомненно, это не может быть проблемой с разрешениями, если я могу создать папку и удалить все ACL из указанной папки?

Если я щелкнул правой кнопкой мыши и попробовал вручную установить полный контроль над Администраторами домена и применить к нему, я получаю отказ в доступе. Я не знаю, куда идти отсюда.

EDIT: Если я не удаляю ACL и добавляю InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly к строке, он применяет разрешения в порядке. Как только я сначала попытаюсь с удалением ACL, он не работает таким же образом. Это должна быть проблема с разрешениями, или я не правильно перестраиваю ACL.

Окончательный Редактировать: я получил все отсортировано. Оказывается, мне нужны были оба правила доступа:

fs.AddAccessRule(new FileSystemAccessRule(new System.Security.Principal.SecurityIdentifier(Account), Rights, ControlType)); 
      fs.AddAccessRule(new FileSystemAccessRule(new System.Security.Principal.SecurityIdentifier(Account), Rights, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, ControlType)); 

Спасибо за вашу помощь.

 Смежные вопросы

  • Нет связанных вопросов^_^