我一直有问题的编程方式分配权限到文件夹/注册表项。 我已成功地分配使用下面的代码继承权限:
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);
这个正确设置的所有子文件夹我创建作为管理员我的文件权限。 但是,它不设置上的权限dir
文件夹本身。 我打得周围的继承和传播史一个公平的几个排列,但没有任何喜悦。
例如,我有:
dir = %programfiles%\Test
如果我已经创建了一个测试文件夹( %programfiles%\Test\SubFolder
),我有一个分配给它为我的用户完全权限,但我不会对完全权限%programfiles%\Test
。 这实在是烦人,因为我想给我的用户完全权限与测试目录什么做的一样好。
我有注册表权限类似的问题,但我相信,如果我能解决一个,我可以同时解决存在的突出问题。
有谁知道这可怎么解决?
问候
三
对于文件夹:
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);
两条线路需要在您的项目。 那么你得到应用于该文件夹,子文件夹和文件的访问控制列表
我绝对不是一个专家在这里,但有摸不着头脑的我自己的目的之后,我认为,戴夫的回答,虽然功能,是过于复杂。 您应该能够只用一个规则来实现这一目标:
FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME,
FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow);
该PropagationFlags.InheritOnly
在原来的代码中使用由OP参数是什么阻止访问规则应用到对象本身。
此外,您不妨设置目录的安全为你创造它,因为.NET只是为此提供过载:
Directory.CreateDirectory(dir, security);