C# – Windows ACL – 应用inheritance的权限

我一直在编程上给文件夹/registry项分配权限时遇到问题。 我设法使用下面的代码分配inheritance权限:

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow); DirectorySecurity security = new DirectorySecurity(); security.SetAccessRule(rule); Directory.CreateDirectory(dir); Directory.SetAccessControl(dir, security); 

这正确地设置我作为pipe理员创build的所有子文件夹上的文件权限。 但是,它不会在dir文件夹本身上设置权限。 我曾经为了inheritance和传播而进行了一些排列,但没有任何的喜悦。

例如,我有:

 dir = %programfiles%\Test 

如果我在testing( %programfiles%\Test\SubFolder )中创build了一个文件夹,我为我的用户分配了完整的权限,但是我没有%programfiles%\Test完全权限。 这真的很烦人,因为我想给我的用户充分的权限做任何与testing目录以及。

我有与registry权限类似的问题,但我相信,如果我能解决一个,我可以解决这两个突出的问题。

有谁知道如何解决这个问题?

问候

对于该文件夹:

 FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME, FileSystemRights.FullControl, AccessControlType.Allow); 

对于子文件夹和文件:

 FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow); 

两条线都需要在你的项目中。 那么你会得到适用于这个文件夹,子文件夹和文件的acls

我不是这方面的专家,但是在为了我自己的目的而弄清楚之后,我认为Dave的答案虽然有用,但是过于复杂。 你应该能够用一个规则来实现这个:

 FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow); 

OP在其原始代码中使用的PropagationFlags.InheritOnly参数是阻止访问规则应用于对象本身的原因。

另外,你也可以在创建目录的时候设置目录的安全性,因为.NET为此目的提供了一个重载:

 Directory.CreateDirectory(dir, security);