Пример hook_file_download

8

Как мне ограничить доступ к определенным файлам в зависимости от их типа содержимого? У меня есть раздел загрузки для зарегистрированных пользователей, и я хочу запретить им размещать ссылки где-то за пределами моего сайта.

hook_file_download()Достаточно ли реализации ?

Я попробовал этот код, и этого достаточно для моей цели, но документация hook_file_download()не очень помогает.

function customize_file_download($uri) {
  global $user;
  if (!array_intersect(array('administrator','editor','expert','verified'), array_values($user->roles))) {
    return 1;
   }
}
Pari
источник
Может быть , я пост пример , и я надеюсь , что это помогает визуализировать меня content_type файл с файла поле (набор частного метода загрузки) , то я должен защитить этот файл от доступа к нему посторонних лиц (на основе роли пользователя)? Какой лучший подход? Просто проверьте, что пользователь имеет правильную роль в hook_file_download, и все?
Пари

Ответы:

8

В drupal 7 есть пара хуков для ограничения доступа к файлам.

Вы должны понять, что эти хуки доступа будут работать только в том случае, если ваш метод загрузки является закрытым, а файлы находятся в вашем личном пути.

Как вы упомянули в своем вопросе, есть hook_file_download, который должен работать в вашем случае (при условии, что файл является закрытым). Это не сработает, если файл, на который кто-то ссылается, является общедоступным, например sites / default / files / abc123.txt.

Если вы загружаете эти личные файлы в поле, то hook_file_download_access может показаться более подходящим. Это даст вам поле, к которому принадлежит файл, а также связанный объект, для которого это поле используется, поэтому вы сможете выполнять более сложную логику, например вызывать соответствующую функцию доступа, чтобы проверить, имеет ли пользователь доступ к поле вместо жестко закодированного списка в коде.

ericduran
источник
hook_file_download с приватной файловой системой не вызывает анонимных пользователей. Есть идеи почему?
Джит
1
я думаю, потому что анонимные пользователи не должны иметь доступ к личным файлам.
DrCord
0

Ссылка на файл - это просто ссылка. Я не верю, что есть способ определить местоположение ссылки. Вы можете посмотреть заголовки, но это, вероятно, не сработает.

Если вы можете определить местоположение ссылки на файл, использование hook_file_download будет хорошим выбором для контроля доступа.

googletorp
источник