¿Cómo dar permisos para las carpetas en c#?
.net security (2)
Sé su dolor: las ACL del sistema de archivos son difíciles de modificar e incluso si parece funcionar, podría romperse en algunas circunstancias. En su caso, hay una solución simple, afortunadamente.
El problema radica en PropagationFlags.InheritOnly
. Esto significa que este permiso solo se aplica a los elementos que heredan permisos, por ejemplo, usted otorga derechos solo para los archivos en este directorio y no en ningún subdirectorio .
Para otorgar derechos de directorio que hereden "normalmente" (es decir, propagar a subdirectorios y todos los archivos), use los siguientes valores para InheritanceFlags y PropagationFlags: InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit
y PropagationFlags.None
.
Necesito darle a la carpeta "Archivos temporales ASP.NET" un permiso de escritura usando c # ... y utilizo este código para darle acceso
DirectoryInfo d1 = new DirectoryInfo(Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "Temporary ASP.NET Files"));
DirectorySecurity md1 = d1.GetAccessControl();
string user_1 = fa.TextGuestDomain + "//" + fa.TextGuestUser;
md1.AddAccessRule(new FileSystemAccessRule(user_1, FileSystemRights.FullControl,InheritanceFlags.ObjectInherit,PropagationFlags.InheritOnly, AccessControlType.Allow));
d1.SetAccessControl(md1);
Cuando revisé las propiedades de seguridad de la carpeta "Archivos ASP.NET temporales" después de implementar el código, no marcó la casilla de verificación "permiso de escritura", en lugar de marcar los "permisos especiales" uno ... Me di cuenta de que incluso cuando cambié el acceso de escritura a control total o lectura, se marcaba el de "permisos especiales" uno ....
Este no es el problema :), el problema es que no da el acceso correcto que le doy ... cuando lo doy por escrito, no actúa como si le diera el permiso de escritura. ¡No sé por qué! ¿Lo estoy haciendo de la manera incorrecta?
Nota: cuando lo estoy haciendo de forma manual, funciona mientras usa la forma de codificación. no funciona...
Espero que me puedas ayudar con eso ...
Muchas gracias
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);
}
El código anterior establecerá los derechos de acceso de la carpeta a control total / lectura-escritura para cada usuario (todos).