Restricționarea accesului la fișiere într-un anumit folder
Posibilă duplicare:
Cum să protejez fișierele încărcate, dacă utilizatorul nu este autentificat?
Există vreo metodă de a restricționa accesul direct la fișierele dintr-un anumit folder doar pentru anumiți utilizatori WordPress care au o anumită capabilitate setată?

Cea mai ușoară soluție PHP ar fi să creezi un script de descărcare. Acesta verifică dacă utilizatorul are permisiunile necesare și servește fișierul către clientul web. Sau, preferința mea, configurează un folder în afara rădăcinii web și plasează fișierele acolo.
Setează permisiunile fișierelor fără acces anonim și lasă serverul web să le citească și să le trimită într-un fișier PHP ca cel de mai jos. Codul de mai jos citește fișierul și îl trimite către 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();
editare 14-1:
creează o casetă normală de încărcare și când fișierul este încărcat, mută-l într-un folder în afara directorului rădăcină web (acest folder nu poate fi accesat de utilizatori prin http, doar de serverul web).
if (move_uploaded_file( $_FILES['Filedata']['tmp_name'] , $upload_dir.$filename ) ) {
// cod de executat după ce fișierul a fost copiat cu succes. Actualizează baza de date sau altceva.
}
$upload_dir.$filename este calea completă către directorul din afara folderului www. Fișierul poate fi acum accesat doar de serverul web. Salvează locația într-o bază de date cu informații despre încărcător. Sau creează subdirectoare pentru fiecare utilizator. Ai nevoie de ceva pentru a diferenția fișierele pentru fiecare utilizator.
Acum, când vrei să descarci un fișier, creează un script numit download.php În acel script verifici dacă utilizatorul are drepturi asupra fișierului.
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();
}
acum vrei să transmiți un file_id sau nume către scriptul de descărcare. deci construiește link-ul ca url/download.php?file=$file. Trebuie să apelezi acest lucru direct sau în primele etape ale plugin-ului tău, altfel vei primi mesajul "headers already sent". Scriptul va verifica dacă utilizatorul are drepturi și va începe să trimită date binare.
Ar trebui să fie ceva de genul acesta, sper că te ajută. Nu este complet, dar ar trebui să te pornească pe drum.

mulțumesc foarte mult pentru răspuns. Aș aprecia foarte mult dacă ați putea extinde explicația. Ideea este că doresc să creez un metabox personalizat pentru încărcare care să transfere fișiere într-un director specific pe server. Apoi, aș dori să restricționez accesul direct la aceste fișiere pentru public, permițând accesul doar utilizatorilor autentificați care au o capabilitate specifică de vizualizare a tuturor acestor fișiere. Ce metodă credeți că ar fi cea mai bună pentru a implementa acest lucru?
