2011-05-23 62 views
6

tengo que dar la carpeta "Archivos temporales de ASP.NET" un permiso de escritura usando C# ... y utilizar este código para darle el acceso¿Cómo dar permisos para las carpetas en C#?

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 llegué a las propiedades de seguridad para la carpeta "Archivos ASP.NET temporales" después de implementar el código, no marcó la casilla de verificación de permiso de "escritura", en lugar de marcar los "permisos especiales" uno ... He notado que incluso cuando cambié el acceso desde escribir al control total o leer, marcó los "permisos especiales" uno ....

Este no es el problema :), el problema es que no da el acceso correcto que le doy ... cuando Le doy escribir, no es una ct como si le doy el permiso de escritura. ¡No sé por qué! ¿Lo estoy haciendo de la manera incorrecta?

Nota: cuando lo estoy haciendo de forma manual, mientras está usando la forma de codificación. que no está funcionando ...

espero que usted me puede ayudar con eso ...

Muchas gracias

Respuesta

7

que conozco su dolor - ACL del sistema de archivos son un dolor para modificar e incluso si parece que funciona , podría romperse en algunas circunstancias. En su caso, hay una solución simple, afortunadamente.

El problema está en PropagationFlags.InheritOnly. Esto significa que este permiso es solo aplicado a elementos que heredan permisos, p. está otorgando los derechos solo para los archivos en este directorio y no en los subdirectorios.

para conceder derechos de directorio que heredan "normalmente" (es decir, se propagan a los subdirectorios y todos los archivos), utilice los siguientes valores para InheritanceFlags y PropagationFlags: InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit y PropagationFlags.None.

+0

Gracias soooooooooooooooo :) Funciona;) – Q8Y

0
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 fijará los derechos de acceso de la carpeta para el control total/de lectura y escritura para todos los usuarios (todo el mundo).

Cuestiones relacionadas