Limitare l'accesso ai file all'interno di una cartella specifica
Possibile duplicato:
Come proteggere gli upload se l'utente non è loggato?
Esiste un modo per limitare l'accesso diretto ai file all'interno di una cartella specifica solo a determinati utenti WordPress che hanno una specifica capacità impostata?

La soluzione PHP più semplice sarebbe creare uno script di download. Verifica se l'utente ha i permessi corretti e invia il file al client web. Oppure, la mia preferenza, configura una cartella al di fuori della root web e posiziona i file lì.
Imposta i permessi del file senza accesso anonimo e lascia che il server web li legga e li restituisca in un file PHP come questo. Il codice seguente legge il file e lo invia al browser.
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header('Content-disposition: attachment; filename='. $file;
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". filesize(ABSPATH.$dir.$file);
readfile($dir.$file);
exit();
modifica 14-1:
crea un normale box di upload e quando il file viene caricato spostalo in una cartella al di fuori della directory webroot (questa cartella non può essere accessibile dagli utenti via http, solo dal server web).
if (move_uploaded_file( $_FILES['Filedata']['tmp_name'] , $upload_dir.$filename ) ) {
// codice da eseguire dopo che il file è stato copiato con successo. Aggiorna il tuo database o altro.
}
$upload_dir.$filename è il percorso completo alla directory al di fuori della cartella www. Il file ora può essere accessibile solo dal server web. Memorizza la posizione in un database con le informazioni di chi ha caricato il file. Oppure crea sottodirectory per ogni utente. Hai bisogno di qualcosa per differenziare i file per ogni utente.
Ora quando vuoi scaricare un file crea uno script chiamato download.php In quello script verifichi se l'utente ha i diritti per il file.
global $user;
if ($user->id == $uploaded_user_id) {
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header('Content-disposition: attachment; filename='. $file;
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". filesize(ABSPATH.$upload_dir.$file);
readfile($upload_dir.$file);
exit();
}
ora vuoi passare un file_id o nome allo script di download. quindi crea il link come url/download.php?file=$file. Devi chiamarlo direttamente o nelle prime fasi del tuo plugin altrimenti otterrai il messaggio headers already sent. Lo script verificherà se l'utente ha i diritti e inizierà a inviare i dati binari.
Dovrebbe essere qualcosa del genere, spero sia d'aiuto. Non è completo ma dovrebbe darti un punto di partenza.

grazie mille per la tua risposta. Apprezzerei molto se potessi espandere la tua risposta. Vedi, quello che vorrei fare è creare un metabox personalizzato per il caricamento che carichi i file in una cartella specifica sul server. Poi vorrei limitare l'accesso diretto a quei file da parte del pubblico a tutti i visitatori del sito, eccetto per quegli utenti che hanno effettuato l'accesso e hanno la specifica capacità di visualizzare tutti questi file. Quale pensi sia il modo migliore per realizzare questo?
