Como restringir o acesso a determinados arquivos com base em seu tipo de conteúdo? Tenho a seção de download para usuários registrados e quero impedi-los de postar links em algum lugar fora do meu site.
A implementação é hook_file_download()
suficiente?
Eu tentei esse código e é suficiente para o meu propósito, mas a documentação de hook_file_download()
não ajuda muito.
function customize_file_download($uri) {
global $user;
if (!array_intersect(array('administrator','editor','expert','verified'), array_values($user->roles))) {
return −1;
}
}
Respostas:
Existem alguns ganchos no drupal 7 para restringir o acesso aos arquivos.
Uma coisa que você precisa entender é que esses ganchos de acesso só funcionarão se o seu método de download for privado e os arquivos estiverem no seu caminho privado.
Como você mencionou na sua pergunta, existe um hook_file_download que deve funcionar no seu caso (supondo que o arquivo seja privado). Isso não funcionará se o arquivo ao qual alguém está vinculando estiver em algum lugar público, como sites / default / files / abc123.txt.
Se você estava carregando esses arquivos particulares em um campo, o hook_file_download_access parece mais apropriado. Isso fornecerá o campo ao qual o arquivo pertence e também a entidade relacionada na qual esse campo está sendo usado, para que você possa executar uma lógica mais complicada, como chamar a função de acesso apropriada para verificar se o usuário tem acesso ao em vez de ter uma lista codificada no código.
fonte
Um link para um arquivo é apenas isso - um link. Não acredito que haja uma maneira de determinar a localização do link. Você pode olhar os cabeçalhos, mas isso provavelmente não funcionará.
Se você pode determinar a localização do link para o arquivo, usar hook_file_download será uma boa opção para o controle de acesso.
fonte