Zugriff auf Dateien in einem bestimmten Ordner beschränken

Mögliche Duplikate:
So schützen Sie Uploads, wenn der Benutzer nicht angemeldet ist?

Gibt es überhaupt eine Möglichkeit, den direkten Zugriff auf Dateien in einem bestimmten Ordner auf bestimmte WordPress-Benutzer zu beschränken, für die diese spezifische functionalität festgelegt wurde?

Solutions Collecting From Web of "Zugriff auf Dateien in einem bestimmten Ordner beschränken"

Die einfachste PHP-Lösung wäre ein Download-Skript. Es prüft, ob der Benutzer die richtigen Berechtigungen hat und liefert die Datei an den Webclient. Oder meine Präferenz richten Sie einen Ordner außerhalb Ihres Web-Root und legen Sie die Dateien dort.

Stellen Sie die Dateiberechtigungen ohne anonymen Zugriff ein und lassen Sie sie vom Webserver lesen und in einer solchen php-Datei ausgeben. Der folgende Code liest die Datei und sendet sie an den 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(); 

Bearbeiten 14-1:

Erstellen Sie ein normales Upload-Feld, und wenn die Datei hochgeladen wird, verschieben Sie sie in einen Ordner außerhalb Ihres Webroot-Verzeichnisses (auf diesen Ordner kann nicht von Benutzern über http zugegriffen werden, nur der Webserver.

 if (move_uploaded_file( $_FILES['Filedata']['tmp_name'] , $upload_dir.$filename ) ) { // code to do after the file has been copied succesfully. Update your database or something. } 

$ upload_dir. $ filename ist der vollständige Pfad zum Verzeichnis außerhalb des Www-Ordners. Die Datei kann nur noch vom Webserver aufgerufen werden. Speichern Sie den Standort in einer database mit Uploader-Informationen. Oder erstellen Sie Unterverzeichnisse für jeden Benutzer. Sie benötigen etwas, um die Dateien für jeden Benutzer zu unterscheiden.

Wenn Sie nun eine Datei herunterladen möchten, erstellen Sie ein Skript namens download.php. In diesem Skript überprüfen Sie, ob der Benutzer Rechte an der Datei hat.

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

Jetzt möchten Sie eine File_id oder einen Namen an das Download-Skript übergeben. so erstellen Sie den Link wie URL / download.php? file = $ file. Sie müssen dies direkt oder in den frühen Phasen Ihres Plugins aufrufen oder Sie erhalten die Header bereits gesendete Nachricht. Das Skript prüft, ob der Benutzer Rechte hat und beginnt mit der Ausgabe von Binärdaten.

Es sollte so sein, hoffe es hilft. Es ist nicht die komplette, aber sollte Sie beginnen.