C# - 的Windows ACL - 将继承的权限(C# - Windows ACL - App

2019-07-17 18:15发布

我一直有问题的编程方式分配权限到文件夹/注册表项。 我已成功地分配使用下面的代码继承权限:

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 。 这实在是烦人,因为我想给我的用户完全权限与测试目录什么做的一样好。

我有注册表权限类似的问题,但我相信,如果我能解决一个,我可以同时解决存在的突出问题。

有谁知道这可怎么解决?

问候

Answer 1:

对于文件夹:

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);

两条线路需要在您的项目。 那么你得到应用于该文件夹,子文件夹和文件的访问控制列表



Answer 2:

我绝对不是一个专家在这里,但有摸不着头脑的我自己的目的之后,我认为,戴夫的回答,虽然功能,是过于复杂。 您应该能够只用一个规则来实现这一目标:

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);


文章来源: C# - Windows ACL - Applying Inherited Permissions