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;
   }
}

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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.