it-swarm-eu.dev

Příklad hook_file_download

Jak mohu omezit přístup k určitým souborům na základě jejich typu obsahu? Mám sekci ke stažení pro registrované uživatele a chci jim zabránit v publikování odkazů někde mimo můj web.

Je implementace hook_file_download() dostatečná?

Vyzkoušel jsem tento kód a je to dost pro můj účel, ale dokumentace hook_file_download() moc nepomůže.

function customize_file_download($uri) {
  global $user;
  if (!array_intersect(array('administrator','editor','expert','verified'), array_values($user->roles))) {
    return −1;
   }
}
8
Pari

V drupal 7) je několik háčků, které omezují přístup k souborům.

Musíte si uvědomit, že tyto přístupové háčky budou fungovat, pouze pokud je vaše metoda stahování soukromá a soubory jsou na vaší soukromé cestě.

Jak jste zmínili ve své otázce, existuje hook_file_download , které by mělo fungovat ve vašem případě (za předpokladu, že soubor je soukromý). Toto nebude fungovat, pokud je soubor, na který někdo odkazuje, někde veřejný, jako jsou weby/default/files/abc123.txt.

Pokud jste náhodou nahrávali tyto soukromé soubory do pole, pak se zdá být vhodnější hook_file_download_access . Tím získáte pole, ke kterému soubor patří, a také související entitu, na které se toto pole používá, takže byste měli mít možnost provádět složitější logiku, jako je volání příslušné přístupové funkce, abyste zkontrolovali, zda má uživatel přístup k místo namísto pevně zakódovaného seznamu v kódu.

8
ericduran

Odkaz na soubor je jen to - odkaz. Nevěřím, že existuje způsob, jak určit umístění odkazu. Možná se budete moci podívat na záhlaví, ale pravděpodobně to nebude fungovat.

Pokud můžete určit umístění odkazu na soubor, bude pro řízení přístupu vhodnou volbou hook_file_download.

0
googletorp