Установка прав доступа к каталогу - получение исключения «Невозможно установить флаги» - PullRequest
5 голосов
/ 19 января 2009

Я пытаюсь progamrtaiclly разрешить доступ на запись к учетной записи ASPNET в каталоге. Для этого я использую следующий код: (Обратите внимание, что я хочу, чтобы «доступ на запись разрешен» для ASPNET также распространялся на дочерние объекты:

static void Main(string[] args)
            {


                FileSecurity fileSecurity;

                fileSecurity = new FileSecurity();

                fileSecurity.SetAccessRuleProtection(true, false);

                fileSecurity.AddAccessRule(new FileSystemAccessRule("ASPNET",FileSystemRights.Write,InheritanceFlags.ObjectInherit|InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow));                                   

                File.SetAccessControl("C:\\TestDir1", fileSecurity);
            }

Этот код приводит к исключению: «Флаги не могут быть установлены. \ R \ nПараметр параметра: inheritanceFlags»

Что может быть не так?

Ответы [ 2 ]

9 голосов
/ 19 января 2009

Получил решение, видимо, мне пришлось бы сделать это так:

DirectoryInfo dirInfo = new DirectoryInfo("C:\\TestDir2");
            DirectorySecurity dirSecurity = dirInfo.GetAccessControl();

            dirSecurity.AddAccessRule(new FileSystemAccessRule("ASPNET", FileSystemRights.Write|FileSystemRights.DeleteSubdirectoriesAndFiles, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));


            dirInfo.SetAccessControl(dirSecurity); 
2 голосов
/ 29 августа 2016

Как вы указали, исходная проблема заключалась в том, что вы использовали класс FileSecurity (который применяется к файлам, а не каталогам) и пытались установить ACL для каталога, но это может произойти по любой из следующих причин а также:

  1. При настройке правила для каталога вы указываете InheritanceFlags.None как флаг наследования, но укажите любой значение, отличное от PropagationFlags.None для флага распространения (вы не можете распространять наследование, которое не существует).
  2. При настройке правила для файла укажите любое значение, кроме InheritanceFlags.None и PropragationFlags.None для соответствующие параметры (файлы не являются контейнерами, и поэтому наследование не может быть указан).

Вы можете увидеть соответствующие проверки, которые выполняет .NET Framework в источнике для метода CheckFlags .

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