我想添加一些新的ACL规则和现有规则。我目前正在使用SetAccessRule
,期望添加新规则也会保留旧规则。根据{{3}},
SetAccessRule方法添加指定的访问控制列表(ACL)规则,或覆盖与规则参数的FileSystemRights值匹配的任何相同ACL规则。例如,如果rule参数指定Read值,并且SetAccessRule方法找到指定Read值的相同ACL规则,则将覆盖相同的规则。如果SetAccessRule方法找到指定Write值的相同ACL规则,则不会覆盖相同的规则。
但是,实际上,我发现添加新规则实际上会覆盖以前的所有规则(属于同一个用户/ SID?)。这似乎与文档所说的相矛盾。
我目前的目的是分配读取和写入权限,但是在单独的调用中。不幸的是,后者的权限会覆盖第一个。在下面的示例代码中,结果仅分配了读取权限。如果我注释掉该块,则仅分配写入权限。这可以通过额外的if
条件来修复以分配两个权限,但它仍会覆盖目录上的任何现有权限,这是不受欢迎的。
DirectoryInfo directory = new DirectoryInfo(abspath);
DirectorySecurity security = directory.GetAccessControl();
security.SetAccessRuleProtection(false, true);
if (perm.Contains("write"))
{
security.SetAccessRule(new FileSystemAccessRule(user, FileSystemRights.Write, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
}
if (perm.Contains("read"))
{
security.SetAccessRule(new FileSystemAccessRule(user, FileSystemRights.ReadAndExecute | FileSystemRights.Traverse, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
}
directory.SetAccessControl(security);
如何在保留现有规则的同时添加新规则?并且,文档是否不正确,我是否误解,或者我的代码是否错误?
答案 0 :(得分:1)
尝试使用DirectorySecurity.AddAccessRule
方法代替追加/添加权限或替换,请参阅此MSDN link了解详情
security.AddAccessRule(new FileSystemAccessRule(user, FileSystemRights.Write, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));