create - move a file to another directory c#
C#File/Directory Permissions (4)
Es probable que los archivos hereden las propiedades de seguridad del padre.
Puede intentar llamar a DirectorySecurity.SetAccessRuleProtection (verdadero, falso) para evitar que los archivos se hereden, antes de llamar a Directory.SetAccessControl ();
Estoy escribiendo una aplicación para administrar el acceso de los usuarios a los archivos. La versión corta de una historia muy larga es que tengo que usar el directorio y los privilegios de archivos para hacerlo. Sin sistema de gestión de documentos para nuestro CEO barato ...
De todos modos ... Tengo todo funcionando, excepto el caso en el que el usuario puede ver qué archivos están en el directorio pero no ver realmente el contenido del archivo. (Puede haber datos sensibles de recursos humanos en los archivos).
Intenté FileSystemRights.ListDirectory, pero eso parece (a pesar de la documentación de MS) establecer ReadData en true también. Apago ReadData (la capacidad de leer los archivos) y de repente no tengo acceso al directorio nuevamente. Los dos aparecen vinculados.
¿Alguna idea de qué permiso (s) establecer para lograr esto?
Mi código actual es:
SetSecurity(pth, usr, FileSystemRights.ListDirectory, AccessControlType.Allow);
...
public void SetSecurity(string dirName, string account,
FileSystemRights rights, AccessControlType controlType)
{
// Get a FileSecurity object that represents the
// current security settings.
DirectorySecurity dSecurity = Directory.GetAccessControl(dirName);
dSecurity.AddAccessRule(new FileSystemAccessRule(account, rights, controlType));
// Set the new access settings.
Directory.SetAccessControl(dirName, dSecurity);
}
Gracias.
--Alemán
FileSystemRights enum asigna ReadData y ListDirectory al valor 1, por lo que los dos son 100% equivalentes en lo que se refiere a .NET.
¿Has probado Traverse en lugar de ListDirectory?
Editar: Basado en este artículo de KB, parece que Windows XP considera que son los mismos, solo uno se aplica solo a los archivos, y uno se aplica solo a los directorios.
Editar 2: siempre que establezca que la regla de acceso ReadData / ListDirectory NO sea heredada por los objetos secundarios, debe poder aplicarla al directorio sin aplicarla a los archivos en el directorio. La clase FileSystemAccessRule admite cambiar los indicadores de herencia.
Sí. Traverse (creo que es mal nombrado) me permite ejecutar un programa dentro de una carpeta, pero NO ver el contenido de una carpeta. No estoy seguro de por qué esto es útil, para ser honesto.
Estoy a punto de decirle al CEO que no se puede hacer y ver cómo las chispas vuelven a volar. :PAG
Son los valores de herencia y propagación que no se establecen cuando FileSystemAccessRule se está instanciando.