Добавьте привилегию " все " в папку с помощью C#.NET
я использовал код ниже, чтобы дать всем доступ к папке:
System.Security.AccessControl.DirectorySecurity sec =
System.IO.Directory.GetAccessControl(directory, AccessControlSections.All);
FileSystemAccessRule accRule = new FileSystemAccessRule("Everyone",
FileSystemRights.Modify,
AccessControlType.Allow);
sec.AddAccessRule(accRule); // setACL
sec.ResetAccessRule(accRule);
теперь пользователь Everyone добавляется в папку, но не с назначенными правами. Все чтение, запись, выполнение и т. д. флажки не установлены.
3 ответов:
Первое, что я хочу сказать тебе, как я нашел это решение. Это, вероятно, более важно, чем ответ, потому что права доступа к файлам трудно получить правильно.
Первое, что я сделал, это установить разрешения, которые я хотел, используя диалоговые окна 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 совпадают с тем, что вы уже установили для вашего тестового каталога.
приведенный ниже код проверяет наличие папки, если она не создана, создает ее. А затем устанавливает каждый пользователь-разрешение этой папки с полным разрешением (чтение и запись).
string file = @"D:\Richi"; private static void GrantAccess(string file) { bool exists = System.IO.Directory.Exists(file); if (!exists) { DirectoryInfo di = System.IO.Directory.CreateDirectory(file); Console.WriteLine("The Folder is created Sucessfully"); } else { Console.WriteLine("The Folder already exists"); } DirectoryInfo dInfo = new DirectoryInfo(file); DirectorySecurity dSecurity = dInfo.GetAccessControl(); dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); dInfo.SetAccessControl(dSecurity); }
использовать
FileSystemRights.FullControlвместоFileSystemRights.ModifyЕсли вы хотите разрешить все действия (ACL).
Comments