7

我一直在以编程方式为文件夹/注册表项分配权限时遇到问题。我已设法使用以下代码分配继承权限:

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

如果我在 test ( %programfiles%\Test\SubFolder) 中创建了一个文件夹,我为我的用户分配了完全权限,但我没有完全权限%programfiles%\Test。这真的很烦人,因为我想给我的用户完全的权限来对 Test 目录做任何事情。

我在注册表权限方面遇到了类似的问题,但我相信如果我能解决一个问题,我就能解决两个突出的问题。

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

问候
特里斯

4

2 回答 2

15

对于文件夹:

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

这两行都需要在您的项目中。然后你会得到适用于这个文件夹、子文件夹和文件的 acl

于 2009-10-06T20:40:56.613 回答
10

我在这里几乎不是专家,但是在出于我自己的目的而不得不弄清楚这一点之后,我相信戴夫的答案虽然实用,但过于复杂。您应该能够通过一条规则来实现这一点:

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);
于 2012-04-11T17:24:47.993 回答