Sistema de archivos mixto público y privado con FileField y Drupal 6

Fecha: 
10 de Febrero de 2010

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.

Solicitud de un archivo por parte del navegador

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.

Sistemas de archivo de Drupal

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

Procesos que se ejecutan a la hora de realizar la descarga

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.

Ubicar la carpeta de descarga fuera del acceso del servidor

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.

Crear el campo de FileField

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

Activar el sistema de descargas privadas

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.

Su voto: Nada Promedio: 4.5 (4 votos)

Contenido Relacionado

Comentarios

Enviar un comentario nuevo

¿Dudas, comentarios?. Anímese, y de su opinión sobre material. Procure cuidar su ortografía y publicar algo relacionado con el contenido.

Por consultas generales, utilice los Foros de Drupal Hispano. Los comentarios no relacionados con el contenido seran borrados.

Seguro que usted no se llama anónimo :)
El contenido de este campo se mantiene privado y no se mostrará públicamente.
Si posee un sitio web puede indicarlo en este campo
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><del>
  • Saltos automáticos de líneas y de párrafos.
  • Usted puede agregar código (genérico) utilizando etiquetas <code>...</code> o <?php ... ?> para código PHP resaltado.

Más información sobre opciones de formato

CAPTCHA
Esta pregunta es para asegurarnos de que usted es humano. Y que sabe sumar por lo menos un poco :)
8 + 4 =
Resuelva este simple problema matemático e introduzca el resultado. Por ejemplo para 1+3, responda 4.