Ejemplo de hook_file_download

8

¿Cómo restrinjo el acceso a ciertos archivos según su tipo de contenido? Tengo la sección de descargas para usuarios registrados y quiero evitar que publiquen enlaces en algún lugar fuera de mi sitio.

¿Es hook_file_download()suficiente la implementación ?

Probé este código y es suficiente para mi propósito, pero la documentación de hook_file_download()no ayuda mucho.

function customize_file_download($uri) {
  global $user;
  if (!array_intersect(array('administrator','editor','expert','verified'), array_values($user->roles))) {
    return 1;
   }
}
Pari
fuente
Tal vez publique un ejemplo y espero que ayude a visualizarlo. Tengo un archivo content_type con un archivo de campo (establezca un método de descarga privado) y luego necesito proteger este archivo para que no acceda a personas no autorizadas (según el rol del usuario). ¿Cuál es el mejor enfoque? Simplemente verifique que el usuario tenga el rol correcto en hook_file_download y eso es todo
Pari

Respuestas:

8

Hay un par de ganchos en drupal 7 para restringir el acceso a los archivos.

Una cosa que debe tener en cuenta es que estos enlaces de acceso solo funcionarán si su método de descarga es privado y los archivos están en su ruta privada.

Como mencionas en tu pregunta, hay un hook_file_download que debería funcionar en tu caso (suponiendo que el archivo sea privado). Esto no funcionará si el archivo al que alguien se vincula está en algún lugar público, como sitios / default / files / abc123.txt.

Si estaba cargando estos archivos privados en un campo, entonces hook_file_download_access parecería más apropiado. Esto le dará el campo al que pertenece el archivo y también la entidad relacionada en la que se está utilizando este campo, por lo que debería poder hacer una lógica más complicada, como llamar a la función de acceso adecuada para verificar si el usuario tiene acceso al campo en lugar de tener una lista codificada en el código.

ericduran
fuente
hook_file_download con sistema de archivos privado no invoca para usuarios anónimos. ¿Alguna idea de por qué?
Jeet
1
Creo que porque los usuarios anónimos no deben acceder a los archivos privados.
DrCord
0

Un enlace a un archivo es solo eso: un enlace. No creo que haya una manera de determinar la ubicación del enlace. Es posible que pueda ver los encabezados, pero esto probablemente no funcionará.

Si puede determinar la ubicación del enlace al archivo, usar hook_file_download será una buena opción para el control de acceso.

googletorp
fuente