Comment restreindre l'accès à certains fichiers en fonction de leur type de contenu? J'ai la section de téléchargement pour les utilisateurs enregistrés et je veux les empêcher de publier des liens quelque part en dehors de mon site.
La mise en œuvre est-elle hook_file_download()
suffisante?
J'ai essayé ce code et c'est suffisant pour mon but, mais la documentation de hook_file_download()
n'aide pas beaucoup.
function customize_file_download($uri) {
global $user;
if (!array_intersect(array('administrator','editor','expert','verified'), array_values($user->roles))) {
return −1;
}
}
Réponses:
Il y a quelques crochets dans drupal 7 pour restreindre l'accès aux fichiers.
Une chose que vous devez comprendre est que ces hooks d'accès ne fonctionneront que si votre méthode de téléchargement est privée et que les fichiers sont dans votre chemin privé.
Comme vous le mentionnez dans votre question, il existe un hook_file_download qui devrait fonctionner dans votre cas (en supposant que le fichier est privé). Cela ne fonctionnera pas si le fichier auquel quelqu'un est lié est quelque part public tel que sites / default / files / abc123.txt.
S'il vous arrivait de télécharger ces fichiers privés dans un champ, alors hook_file_download_access semblerait plus approprié. Cela vous donnera le champ auquel appartient le fichier et également l'entité associée sur laquelle ce champ est utilisé, vous devriez donc être en mesure de faire une logique plus compliquée, comme appeler la fonction d'accès appropriée pour vérifier si l'utilisateur a accès au au lieu d'avoir une liste codée en dur dans le code.
la source
Un lien vers un fichier n'est rien d'autre qu'un lien. Je ne pense pas qu'il existe un moyen de déterminer l'emplacement du lien. Vous pourrez peut-être consulter les en-têtes, mais cela ne fonctionnera probablement pas.
Si vous pouvez déterminer l'emplacement du lien vers le fichier, l'utilisation de hook_file_download sera un bon choix pour le contrôle d'accès.
la source