¿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;
}
}
Respuestas:
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.
fuente
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.
fuente