En #14 observamos que, cuando se envía o recibe un archivo por Internet, este no tiene permisos, sino que se crean cuando el mismo es escrito al sistema de ficheros, por lo que obviamos toda la parte de ficheros ya que creíamos que era algo que no podíamos implementar (y que, además, los servicios de almacenamiento en la nube tampoco lo contemplan; pues la descarga siempre tiene los mismos permisos).
Sin embargo, ahora se nos ha ocurrido la siguiente idea para poder implementar un sistema de permisos para nuestra aplicación:
Cuando vamos a subir un archivo, enviamos como un nuevo campo del multipart una cadena que simbolice la representación de los flags de permisos al estilo unix (rw-r--r--, por ejemplo). No tenemos en cuenta el flag del directorio, así que tendrá una longitud fija de 9 caracteres.
Cuando vayamos a guardar (o actualizar) el fichero en el servidor, antes extraemos esta cadena y la guardamos directamente junto con el modelo.
Al descargar el fichero, antes pediremos los metadatos del mismo, haciendo que reciba el string de permisos, y luego ya descargamos el fichero.
Una vez descargado y guardado, lo abrimos para obtener sus permisos; luego, los actualizamos acorde a el string que recibimos inicialmente, y hacemos un chmod del fichero descargado.
De esta forma podemos mantener los permisos aunque los ficheros vengan desde la red.
Condiciones de satisfacción
[x] Crear migración y modificar modelo y DAO de los ficheros.
[x] Modificar controladores para obtener la cadena de flags de permisos desde el multipart.
[x] Añadir nuevo endpoint para obtener los metadatos de un fichero.
[x] Modificar subida de fichero para añadir los flags de permisos como un campo más en el multipart.
[x] Modificar descarga de fichero para modificar los flags de permisos del fichero guardado.
[x] Modificar listado de ficheros para que se muestren también los flags de permisos de cada fichero.
Descripción
En #14 observamos que, cuando se envía o recibe un archivo por Internet, este no tiene permisos, sino que se crean cuando el mismo es escrito al sistema de ficheros, por lo que obviamos toda la parte de ficheros ya que creíamos que era algo que no podíamos implementar (y que, además, los servicios de almacenamiento en la nube tampoco lo contemplan; pues la descarga siempre tiene los mismos permisos).
Sin embargo, ahora se nos ha ocurrido la siguiente idea para poder implementar un sistema de permisos para nuestra aplicación:
rw-r--r--
, por ejemplo). No tenemos en cuenta el flag del directorio, así que tendrá una longitud fija de 9 caracteres.De esta forma podemos mantener los permisos aunque los ficheros vengan desde la red.
Condiciones de satisfacción
Referencias