Passwortgeschützte Ordner - Upload und Download

joseppo

Grünschnabel
Hallo,

folgende Aufgabenstellung bereitet mir Kopfzerbrechen:

Ich möchte mehrere passwortgeschützte Upload-/Download-Ordner einrichten.

Meine Idee:
Php-programmiertes, mysql-gestütztes Kundenlogin
-> dann: je nach User-Login öffnet sich ein entsprechender Ordner mit den dort abgelegten Dateien.
D.h.: wenn User A sich einloggt, öffnet sich Ordner A, bei User B öffnet sich Ordner B, etc.

-> dann brauche ich auch noch eine Upload-Möglichkeit


Es wäre toll, wenn jemand den ein oder anderen Tipp geben könnte.
 
Platziere das Verzeichnis für die Dateien am besten außerhalb des von außen zugänglichen Bereichs, so dass ein direkter Zugriff nicht möglich ist. Die meisten (kostelpflichtige) Webspace-Angebote bieten solch ein Verzeichnis neben dem von außen zugänglichen „htdocs“-/„html“-Verzeichnis oder wie es auch heißen mag an.
Sämtliche Interaktion muss dann über ein Mittelsmann-Skript laufen, das für die Authentifizierung und den Datenaustausch (Upload/Download) sorgt. Ein eigenes Verzeichnis für jeden Benutzer musst du dabei gar nicht anlegen. Denn mithilfe von ein paar Datenbanktabellen kannst du eine Verzeichnishierarchie auch ganz einfach nachbilden ohne diese dass diese physikalisch tatsächlich existiert.
 
Ein eigenes Verzeichnis für jeden Benutzer musst du dabei gar nicht anlegen. Denn mithilfe von ein paar Datenbanktabellen kannst du eine Verzeichnishierarchie auch ganz einfach nachbilden ohne diese dass diese physikalisch tatsächlich existiert.
Könntest du etwas genauer erläutern wie so etwas funktioniert? So etwas in der Art muss ich eventuell auch bald umsetzen :)

cAm3eel.
 
Prinzipiell reicht eine Tabelle dafür aus, die beispielsweise folgendes Schema (Adjazenzmodell, siehe Storing Hierarchical Data in a Database) hat:
Code:
CREATE TABLE `directory` (
	`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
	`user_id` INT UNSIGNED NOT NULL,
	`parent` INT UNSIGNED NULL,
	`name` VARCHAR(32) NOT NULL,
	PRIMARY KEY (`id`)
)
Die Dateien selbst würden mit fortlaufendem numerischen Name in einem gemeinsamen Verzeichnis gespeichert, wobei die Informationen zu den Dateien ebenfalls in einer Tabelle gespeichert würden, beispielsweise:
Code:
CREATE TABLE `file` (
	`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
	`directory_id` INT UNSIGNED NOT NULL,
	`name` VARCHAR(32) NOT NULL,
	`contenttype` VARCHAR(32) NOT NULL,
	PRIMARY KEY (`id`)
)
Die Zugriffsautorisierung läuft hierbei ausschließlich über die virtuellen Verzeichnisse, sodass jeder Benutzer erst einmal ein eigenes Anfangsverzeichnis (etwa die Benutzer-ID) braucht.
Wenn also Benutzer 123 den Pfad „/foo/bar“ anfordert, würde dies erst mal auf den virtuellen Pfad „/123/foo/bar“ abgebildet. Dann muss geprüft werden, ob dieser Pfad überhaupt existiert. Dazu müsste in der „directory“-Tabelle etwa folgende Datensätze vorhanden sein:
Code:
+----+---------+--------+------+
| id | user_id | parent | name |
+----+---------+--------+------+
|  1 |     123 |   NULL |  123 |
|  2 |     123 |      1 |  foo |
|  … |    …    |    …   |   …  |
+----+---------+--------+------+
Und in der „file“-Tabelle etwa folgender:
Code:
+----+--------------+------+-------------+
| id | directory_id | name | contenttype |
+----+--------------+------+-------------+
|  1 |            2 |  bar |  text/plain |
|  … |      …       |   …  |      …      |
+----+--------------+------+-------------+
Damit hätte jeder Benutzer nur auf sein eigenes Verzeichnis und seine eigenen Dateien Zugriff.

Nachtrag: Der virtuelle Pfad „/123/foo/bar“ würde dann schließlich auf die physikalische Datei mit dem Namen „1“ abgebildet, da dies die ID des Datensatzes ist.
 
Wichtig wäre noch zu prüfen, dass ein und derselbe Benutzer keine gleichnamigen Verzeichnisse oder Dateien im selben Verzeichnis hat oder anlegen möchte. Dort müsste dann eine Aufforderung zur Wahl der Aktion (Existierendes ersetzen, Neues umbenennen, Aktion abbrechen, etc.) stattfinden, damit es zu keinen Datenbankkonflikten, was die Eindeutigkeit der Dateien und Verzeichnisse betrifft, kommt.
Dass unterschiedliche Benutzer gleichnamige Verzeichnisse oder Dateien haben, ist aufgrund der eindeutigen Hierarchie irrelevant.
 
Zurück