Esempio di hook_file_download


8

Come posso limitare l'accesso a determinati file in base al loro tipo di contenuto? Ho la sezione download per gli utenti registrati e voglio impedire loro di pubblicare link da qualche parte al di fuori del mio sito.

L'implementazione è hook_file_download()sufficiente?

Ho provato questo codice ed è abbastanza per il mio scopo, ma la documentazione di hook_file_download()non aiuta molto.

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

Forse inserisco un esempio e spero che sia di aiuto visualizzarlo Ho un file content_type con un file di campo (imposta il metodo di download privato) quindi devo proteggere questo file dall'accesso a persone non autorizzate (in base al ruolo dell'utente)? Qual è il miglior approccio? Basta controllare che l'utente abbia il giusto ruolo in hook_file_download e tutto qui?
Pari,

Risposte:


8

Vi sono un paio di hook in drupal 7 per limitare l'accesso ai file.

Una cosa che devi capire è che questi hook di accesso funzioneranno solo se il tuo metodo di download è privato e i file si trovano sul tuo percorso privato.

Come accennato nella tua domanda, c'è un hook_file_download che dovrebbe funzionare nel tuo caso (supponendo che il file sia privato). Questo non funzionerà se il file, a cui qualcuno si collega, è in qualche luogo pubblico come siti / default / file / abc123.txt.

Se ti è capitato di caricare questi file privati ​​in un campo, allora hook_file_download_access sembrerebbe più appropriato. Questo ti darà il campo a cui appartiene il file e anche l'entità correlata su cui questo campo viene utilizzato, quindi dovresti essere in grado di fare una logica più complicata come chiamare la funzione di accesso appropriata per verificare se l'utente ha accesso al campo invece di avere un elenco hardcoded nel codice.


hook_file_download con file system privato non invoca per utenti anonimi. Qualche idea sul perché?
Jeet

1
penso perché gli utenti anonimi non dovrebbero accedere ai file privati.
DrCord,

0

Un collegamento a un file è proprio questo: un collegamento. Non credo che ci sia un modo per determinare la posizione del collegamento. Potresti riuscire a guardare le intestazioni, ma questo probabilmente non funzionerà.

Se riesci a determinare la posizione del link al file, usare hook_file_download sarà una buona scelta per il controllo degli accessi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.