как установить ACL для папок из С#

Как я могу автоматизировать следующие ручные шаги в C#?

  • Щелкните правой кнопкой мыши папку в проводнике Windows;

    Properties -> Security -> Advanced -> Edit

  • Снимите флажок «Включить наследуемые разрешения от родительского объекта этого объекта» и нажмите «Удалить».

  • Нажмите «Добавить», выберите группу и предоставьте ей права на изменение.

Я нашел эту статью, которая выглядит так: именно то, что мне нужно, но у меня нет и не могу найти Microsoft.Win32.Security.


person Andrew Bullock    schedule 02.09.2010    source источник


Ответы (3)


проверьте код ниже:

DirectoryInfo dInfo = new DirectoryInfo(strFullPath);

DirectorySecurity dSecurity = dInfo.GetAccessControl();

//check off & copy inherited security setting 
dSecurity.SetAccessRuleProtection(true, true); 

dInfo.SetAccessControl(dSecurity);

http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.objectsecurity.setaccessruleprotection.aspx

и это для установки разрешений на папку:

http://www.redmondpie.com/applying-permissions-on-any-windows-folder-using-c/

person Aneef    schedule 02.09.2010

Я не знаю об этом, но вы сможете сделать это через DirectorySecurity в пространстве имен System.Security.AccessControl.

И я предполагаю, что вы, вероятно, захотите взглянуть на также перечисление InheritanceFlags.

person Hans Olsson    schedule 02.09.2010
comment
@Andrew: Нет проблем, Аниф, очевидно, приложил больше усилий, чтобы сделать его более исчерпывающим ответом, поэтому имеет смысл, что его приняли. - person Hans Olsson; 02.09.2010

Насколько я понимаю, ACL не являются частью .Net Standard с версии 2.0, однако, если вы устанавливаете через:

Install-Package Microsoft.Windows.Compatibility -Version 2.0.1 Install-Package Microsoft.DotNet.Analyzers.Compatibility -Version 0.2.12-alpha

Вы получите методы расширения, соответствующие тем, к которым вы привыкли в полной версии .Net Framework. Например, мне нужно установить безопасность каталога, после установки вышеуказанного кода этот код компилируется с предупреждениями о том, что некоторые методы недоступны в Linux или macOS.

 DirectoryInfo dInfo = new DirectoryInfo(strFullPath);
 DirectorySecurity dSecurity = dInfo.GetAccessControl();
 //check off & copy inherited security setting 
 dSecurity.SetAccessRuleProtection(true, true); 
 dInfo.SetAccessControl(dSecurity);

для получения дополнительной информации см. https://github.com/dotnet/docs/blob/master/docs/core/porting/windows-compat-pack.md

person Michael    schedule 31.01.2019