Download mit Wasserzeichen – dreistufiger Ablauf und Ausgabeprotokoll

Schritte von Downloadanfrage, asynchroner Vorbereitung und gestreamter Auslieferung, erneute Rechteprüfung, Inhalt des Wasserzeichens und Fingerabdrücke der ausgegebenen Exemplare.

Überblick

Ein Portal-Download läuft in drei Schritten: Anfrage, Vorbereitung im Hintergrund, dann Auslieferung der Datei. Bytes bewegen sich erst im letzten Schritt, und kein Exemplar mit Wasserzeichen wird im Webspeicher abgelegt.

Datenmodell

Die Tabellennamen tragen in der Datenbank das installationseigene Präfix.

TabelleRolle
doc_downloadDownloadanfrage (Token, Benutzer, Quelle, store_id, Ordner, Dokument, Zustand, Ablauf)
doc_download_itemAusgabe je Datei (eindeutiger Wasserzeichencode, SHA-256-Fingerabdruck, Grund des Auslassens)

Migration: install/migrations/1.1.0/20261029_011_dataroom_store_download.sql.

Ablauf

  1. dlrequest&doc_share_id= (optional doc_id; ohne den ganzen Ordner): Anmeldeprüfung (error_login_required), dann downloadRequest(): Der Ordner gehört dem Benutzer und ist herunterladbar, bei einer Einzeldatei ist auch das Dokument zugänglich und herunterladbar; dlbtdocdownload->request(user_id, 'portal', share_id, doc_id) schreibt eine Zeile in doc_download und reiht eine sofortige Aufgabe doc_download ein. Antwort: Token, queued.
  2. Hintergrundaufgabe doc_download (prepareQueued(50)): schließt abgelaufene Anfragen; prüft das Recht mit den zu diesem Zeitpunkt gültigen Regeln erneut (Zuordnung, Zeitfenster, Shop der Anfrage, Inhaltsbereich, Herunterladbarkeit von Ordner und Dokument; bei einer Admin-Anfrage alle aktiven Dokumente des Ordners); je Datei ein eindeutiger Code im Ausgabeprotokoll; nicht markierbare Dateien skip; ohne ausgebbare Datei failed (nothing_watermarkable oder nothing_allowed), sonst ready mit 24 Stunden Ablauf.
  3. dlstatus (alle zwei Sekunden): nur die eigene Anfrage (getDownloadByToken); hat die Warteschlange sie nach 20 Sekunden nicht übernommen, führt der Endpunkt die Vorbereitung selbst aus; ein abgelaufenes fertiges Paket ist expired. Antwort: Zustand, Dateien, ausgelassene, bei fertig die URL von dlfile.
  4. dlfile: Token gehört dem Benutzer, Zustand ready, und der Ordner ist JETZT zugänglich. dlbtdocdownload->stream(): Bytes je Datei in den Speicher, Wasserzeichen im Speicher (PDF: Dlbtwatermark::pdf, Bild: Dlbtwatermark::image; Text: Name, ID, Datum, „Vertraulich“, eindeutiger Code); eine Datei direkt, mehrere als gestreamtes ZIP (Zipwriter) mit Ordnernamen und Inhaltsverzeichnis. Der SHA-256-Fingerabdruck jedes Exemplars wird protokolliert (markDownloadIssued) und der Download markiert (markDownloaded).

Die alte Route download bleibt bestehen: Ihr Rumpf startet die gemeinsame Anfrage und leitet mit dem Token-Parameter zum Portal weiter.