Exemplo de hook_file_download

8

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;
   }
}
Pari
fonte
Talvez eu poste um exemplo e espero que ajude a visualizá-lo. Eu tenho o arquivo content_type com o arquivo de campo (definir o método de download privado); então, preciso proteger este arquivo contra o acesso a pessoas não autorizadas (com base na função do usuário)? Qual é a melhor abordagem? Basta verificar se o usuário tem o papel certo em hook_file_download e isso é tudo?
Pari

Respostas:

8

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.

ericduran
fonte
hook_file_download com sistema de arquivos privado não chama para usuários anônimos. Alguma idéia do porquê?
Jeet
11
Eu acho que porque usuários anônimos não devem acessar os arquivos privados.
DrCord 30/07/2014
0

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.

googletorp
fonte