Первое, что я хочу рассказать вам, это то, как я нашел это решение. Это, вероятно, более важно, чем ответ, потому что права доступа к файлам трудно получить правильные.
Первое, что я сделал, это установил нужные мне разрешения с помощью диалоговых окон и флажков 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 будут соответствовать тому, что вы уже установили для своего тестового каталога.
person
Yoshi
schedule
22.03.2011