Sistema de archivos mixto público y privado con FileField y Drupal 6
Una de las novedades más interesantes en lo que respecta a archivos en Drupal 7 es la posibilidad de usar sistemas de archivos públicos y privados al mismo tiempo, en una misma instalación. Esto en la actualidad no es posible con Drupal 6, ni Drupal 5, directamente desde el core. Sin embargo, con algunas técnicas este inconveniente es bastante fácil de resolver
Pero antes de avanzar más sobre como lograr un sistema de ficheros mixto, público/privado, veamos en que consiste esto de los sistemas de archivos.
La teoría
Cuando un usuario visualiza una página de internet, su navegador se conecta con un servidor. En primer lugar, seguramente se solicitará un archivo HTML o similar, que es el que contiene en contenido de la página a visualizar.
Pero seguramente en su interior habrá referencias a imágenes, hojas de estilo en CSS, archivos de scripts, etc.
Pongamos el ejemplo de Drupal.org mismo. En la página principal hay un enlace para descargar el archivo de instalación de Drupal. Cuando un usuario desea descargar el archivo, el navegador hace una solicitud al servidor y este le envía el contenido del archivo.

Drupal.org utiliza un sistema de archivos público, esto significa que cualquier archivo puede descargarse directamente desde el servidor, sin ninguna restricción. Estamos hablando, claro está, de aquellos archivos que pueden ser descargados, como los módulos o los parches.
Existe también el método privado de descarga de archivos. En este caso, antes de poder descargar el archivo, un proceso se dispara para controlar que efectivamente tengamos las credenciales necesarias para acceder al archivo.
Un ejemplo típico de esto son los archivos adjuntos de los correos electrónicos de gmail. No basta con darle la dirección completa a algún colega para que intente descargar el archivo. Si no ha iniciado sesión en gmail, el archivo será completamente inaccesible. Los sitios de descarga de archivos como RapidShare o FilesTube utilizan el mismo mecanismo.
Drupal permite elegir el sistema de archivos desde Administrar -> Configuración del sitio -> Sistema de archivos. Repetimos, en Drupal 6 solamente podemos elegir entre el sistema público o el privado, como lo ilustra la figura.

Internamente, la solicitud de descarga de un archivo puede graficarse de la siguiente forma:

La mayor complejidad está situada en el control que se hace con los archivos privados (en la flecha ida y vuelta con Drupal). Cuando un usuario desea descargar un archivo en un sistema protegido, Drupal controlará conectándose a la base de datos para decidir si se debe o no habilitar la descarga.
Los problemas
Es claro que un sistema de archivos privados implica una mayor carga por parte del servidor. Por cada archivo al que se desee acceder, se ejecutan usualmente varias consultas a la base de datos.
En los sistemas públicos, Drupal raramente se entera de que un archivo está siendo descargado, por lo que la cantidad de procesamiento disminuye considerablemente y se pueden atender más peticiones juntas.
El problema es que muchas veces se necesitan datos privados, como fotocopias de documentos de los usuarios, recetas clínicas, documentos confidenciales, pero a su vez, se tiene una gran cantidad de archivos que podrían ser públicos, como galerías de imágenes o archivos pdf.
En ese caso, si usted está leyendo esto en el 2010, o la versión de Drupal 7 aún no salió a la luz, y necesita un sistema como el descripto anteriormente, lamento informarle, está en apuros.
La solución
Pero claro, como el nombre del artículo lo indica, es posible construir un sitio en Drupal 6 con un sistema mixto de archivos.
Para hacer esto, hay algunas recetas "a mano" que pueden leerse en Drupal.org o en algunos blogs:
Existen también dos modulos relacionados con el modulo upload de Drupal:
Sin embargo, si su intención es algo más visual y flexible (y usando FileField que es por llamarlo de alguna forma, el futuro de Drupal), tal vez la mejor opción sea FileField Private Downloads.
Este módulo, relativamente nuevo, permite adjuntar archivos a un nodo, y hacer que estos sean privados, manteniendo un sistema público para todo lo demás.
Para instalarlo es necesario tener instalado a demás CCK y Filefield.
Una vez que se instala, en la misma interfaz de configuración que mostramos antes, aparece un nuevo campo en donde es posible indicar el lugar donde se guardarán los archivos privados.
Es importante que este directorio esté fuera del alcance del servidor web.
La siguiente imagen ilustra un buen lugar para colocar este directorio. Simplemente controlar que no se pueda llegar a ella mediante el navegador.

Una vez que se configuró Drupal para trabajar con sistema público y se definió el directorio de archivos privados, procedemos a crear un campo del tipo File en algún tipo de contenido.

Y entre las opciones de configuración marcamos la opción: "Private downloads"

Y eso es todo. Ahora, todos los archivos que se suban a ese campo serán tratados como privados, y solo podrán descargarlos aquellos quienes puedan visualizar el campo.
Recordar que el módulo Content Permissions, incluido en el paquete CCK, permite definir que campos se pueden ver y que campos no. Por lo que un campo invisible para un usuario, automáticamente restringe la descarga de los archivos que contiene.
Un último comentario:
Al momento de escribir estas lineas, este modulo está en su versión Alpha-2, yo lo he probado y funciona bastante bien, sin embargo es probable que contenga algunos errores. Si es el caso, repórtenlos en el issue queue del proyecto, ya que yo soy uno de los Co-Mantainers del módulo :)
Que lo disfruten, y comenten sus experiencias en los comentarios.
- 3041 lecturas
Contenido Relacionado
Resumen
Este artículo explica como se configuraron los dos módulos más utilizados en cualquier sitio con Drupal. CCK y Views. Como se utiliza una versión de Drupal 6 se trabajará con CCK 2.x y Views 2.x
Inicio de sesión
Comentarios recientes
- no aparece la galeria de galerias
hace 17 horas 50 mins - dependencia de modulo desaparecida
hace 1 día 10 horas - Nombre del Sitio + Nombre de Carpeta
hace 1 semana 21 horas - Gracias
hace 14 semanas 4 días - Tutorial espectacular
hace 19 semanas 19 horas - Muchisimas gracias, realmente
hace 20 semanas 2 días - Re: no puedo ver los videos
hace 20 semanas 5 días - no puedo ver los videos
hace 20 semanas 5 días - Gracias
hace 21 semanas 2 días - Re: Añadir regiones en drupal 6
hace 22 semanas 1 día

Comentarios
Enviar un comentario nuevo