我一直在编程上给文件夹/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);