Как мне ограничить доступ к определенным файлам в зависимости от их типа содержимого? У меня есть раздел загрузки для зарегистрированных пользователей, и я хочу запретить им размещать ссылки где-то за пределами моего сайта.
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;
}
}
Ответы:
В drupal 7 есть пара хуков для ограничения доступа к файлам.
Вы должны понять, что эти хуки доступа будут работать только в том случае, если ваш метод загрузки является закрытым, а файлы находятся в вашем личном пути.
Как вы упомянули в своем вопросе, есть hook_file_download, который должен работать в вашем случае (при условии, что файл является закрытым). Это не сработает, если файл, на который кто-то ссылается, является общедоступным, например sites / default / files / abc123.txt.
Если вы загружаете эти личные файлы в поле, то hook_file_download_access может показаться более подходящим. Это даст вам поле, к которому принадлежит файл, а также связанный объект, для которого это поле используется, поэтому вы сможете выполнять более сложную логику, например вызывать соответствующую функцию доступа, чтобы проверить, имеет ли пользователь доступ к поле вместо жестко закодированного списка в коде.
источник
Ссылка на файл - это просто ссылка. Я не верю, что есть способ определить местоположение ссылки. Вы можете посмотреть заголовки, но это, вероятно, не сработает.
Если вы можете определить местоположение ссылки на файл, использование hook_file_download будет хорошим выбором для контроля доступа.
источник