我想告诉你的第一件事是我是如何找到这个解决方案的。这可能比答案更重要,因为很难获得正确的文件权限。
我做的第一件事是使用 Windows 对话框和复选框设置我想要的权限。我为“所有人”添加了一条规则,并勾选了除“完全控制”之外的所有框。
然后我编写了这段 C# 代码来准确地告诉我复制 Windows 设置需要哪些参数:
string path = @"C:\Users\you\Desktop\perms"; // path to directory whose settings you have already correctly configured
DirectorySecurity sec = Directory.GetAccessControl(path);
foreach (FileSystemAccessRule acr in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) {
Console.WriteLine("{0} | {1} | {2} | {3} | {4}", acr.IdentityReference.Value, acr.FileSystemRights, acr.InheritanceFlags, acr.PropagationFlags, acr.AccessControlType);
}
这给了我这行输出:
Everyone | Modify, Synchronize | ContainerInherit, ObjectInherit | None | Allow
所以解决方案很简单(但如果您不知道要寻找什么,就很难做到正确!):
DirectorySecurity sec = Directory.GetAccessControl(path);
// Using this instead of the "Everyone" string means we work on non-English systems.
SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
Directory.SetAccessControl(path, sec);
这将使 Windows 安全对话框上的复选框与您已经为测试目录设置的复选框相匹配。