Agregue el privilegio “Todos” a la carpeta usando C # .NET

He utilizado el siguiente código para permitir que todos tengan acceso a una carpeta:

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

Ahora, el usuario Todos se agrega a la carpeta, pero no con ningún derecho asignado. Todas las casillas de verificación de lectura, escritura, ejecución, etc. no están marcadas.

Lo primero que quiero decirte es cómo encontré esta solución. Esto es probablemente más importante que la respuesta porque los permisos de archivo son difíciles de corregir.

Lo primero que hice fue establecer los permisos que quería usando los cuadros de diálogo y las casillas de verificación de Windows. Agregué una regla para “Todos” y marqué todas las casillas excepto “Control total”.

Luego escribí este código C # para decirme exactamente qué parámetros necesito para duplicar la configuración de 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); } 

Esto me dio esta línea de salida:

 Everyone | Modify, Synchronize | ContainerInherit, ObjectInherit | None | Allow 

Entonces, la solución es simple (¡pero difícil de resolver si no sabes qué buscar!):

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

Esto hará que las casillas de verificación en el diálogo de seguridad de Windows coincidan con lo que ya ha configurado para su directorio de prueba.

El código siguiente comprueba la existencia de la carpeta, si no se crea, crea una. Y luego establece cada permiso de usuario de esa carpeta con permiso completo (lectura y escritura).

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

use FileSystemRights.FullControl lugar de FileSystemRights.Modify si desea permitir todas las acciones (ACL).

Intereting Posts