how to set folder ACLs from C#
Asked Answered
P

3

5

How can I automate the following manual steps in C#?

  • Right click a folder in Windows Explorer;

    Properties -> Security -> Advanced -> Edit

  • Un-tick "Include inheritable permissions from this object's parent" and click Remove.

  • Click Add, choose a group and grant it Modify rights.

I've found this article, which looks like exactly what i need, but I don't have and cant find Microsoft.Win32.Security.

Pernicious answered 2/9, 2010 at 10:49 Comment(0)
D
5

check the code below:

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

and this for setting permissions on a folder :

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

Deciliter answered 2/9, 2010 at 11:16 Comment(0)
P
1

I don't know about that one, but you should be able to do that via the DirectorySecurity class in the System.Security.AccessControl namespace.

And I assume you'd probably want to look at the InheritanceFlags enumeration as well.

Petrarch answered 2/9, 2010 at 11:4 Comment(1)
@Andrew: No problem, Aneef obviously put more effort into his to make it a more comprehensive answer so makes sense that his is accepted.Petrarch
E
1

My understanding is that ACLs are not part of .Net Standard as of 2.0, however, if you install via:

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

You will get extensions methods matching what you are accustomed to in full .Net Framework. For example, I need to set directory security, after installing the above, this code compiles with warnings that some of the methods are not available on linux or macOS

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

for more information, see https://github.com/dotnet/docs/blob/master/docs/core/porting/windows-compat-pack.md

Early answered 31/1, 2019 at 11:59 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.