Datenraum-Portal – Zugriffskette, Anmeldung und Ansicht

Die bei jeder Anfrage geprüfte Zugriffskette des Portals, Anmeldung, dauerhafte Sitzung und Einladungstoken sowie die Endpunkte für Ansicht, Vorschau, Suche und Schnelllink.

Überblick

Eine eigenständige, passwortgeschützte Portalseite, auf der Dokumente der im Admin-Bereich freigegebenen Ordner angesehen, durchsucht und — falls erlaubt — mit Wasserzeichen heruntergeladen werden. Die Anmeldung nutzt den Admin-Benutzerstamm des Frameworks. Shopabhängig: Ordner und Dokumente erscheinen nur im zugeordneten Shop (Subdomain).

Gemeinsame Zugriffskette

  1. Der Benutzer ist aktiv (isUserActive, bei jeder Anfrage); Sitzungsschlüssel docshare_user_id.
  2. Der Ordner ist zugänglich (accessibleWhere): doc_share.status = 1, date_start <= jetzt < date_expire in Budapester Zeit, das eigene Zuordnungsfenster des Benutzers und Shopfilter (doc_share_to_store).
  3. Dokument: Mitgliedschaft in doc_share_item, doc.status = 1, Inhalts-(Unternehmens-)bereich aus den Regeln company/company_id von permission_scope (Benutzer, sonst Gruppe; Super-Admin unbeschränkt; ohne Regel keine Einschränkung; leere Erlaubnisliste = nichts) und Dokument-Shopfilter (doc_to_store).
  4. Jedes Ereignis geht ins Audit-Protokoll (Kanal document/portal) mit IP-Adresse und User-Agent.

Endpunkte

EndpunktVerhalten
document/documentohne Anmeldung nur das Anmeldefenster; angemeldet: linke Navigation, Labels, globale Suche. Ohne doc_share_id die Startseite: Ordnerkarten, Statistik, alle zugänglichen Dokumente nach doc_id dedupliziert (das günstigere Downloadrecht gewinnt), externe Weblinks, Gesamtgröße; mit doc_share_id die Ordneransicht. Je Zeile Typ, can_view, can_download (Ordner UND Dokument herunterladbar), nur Controller-URLs. Bei einem Nicht-Standard-Shop Name und Logo des Shops.
.login, .logoutauthenticate(): aktiver Benutzer, password_verify; mit remember ein 30-Tage-Token (doc_portal_token, Cookie dlbt_portal_remember: secure, httponly, SameSite=Lax). Fehlschläge werden mit Benutzernamen protokolliert. Abmelden löscht Token und Cookie.
.setpassword, .setpasswordsaveverifyInviteToken() (SHA-256; aktiv, unbenutzt, nicht abgelaufen, an aktiven Benutzer gebunden); bei ungültigem Token gelangen keine Daten nach außen. Speichern: mindestens 8 Zeichen und Übereinstimmung, setUserPassword(), markInviteUsed(), automatische Anmeldung, Protokoll. Tabelle: user_invite.
.viewvolle Kette; direkte Navigation bei einbettbaren Typen gesperrt (Sec-Fetch-Dest: document); Bytes aus dem Speicher (lokale Kopie, bei Drive und OneDrive der Dokumenten-Cache außerhalb des Webroots); Office-Dateien per Drive-Konvertierung als PDF (zwischengespeichert); dynamisches Wasserzeichen bei PDF (Dlbtwatermark::pdf: Name, ID, Datum, Uhrzeit, Hinweistext); Content-Disposition: inline; temporäre Dateien werden gelöscht
.gviewbei einer Drive-Datei nach der Kette ein linkbasiertes Leserecht (einmal je Sitzung) und Weiterleitung zur Drive-Vorschau; dieser Weg setzt kein Wasserzeichen
.thumbnur Bilder, w = 240, 480 oder 960; ETag und 304; Cache mit LRU-Berührung; ohne Recht 403
.sheetbei herunterladbarem Ordner und Dokument eine Google-Kopie („Name (online)“) mit Recht writer/anyone, im Doc-Datensatz gespeichert; das Original bleibt unverändert
.search, .searchallNamensfilter im Ordner; globale Suche über alle zugänglichen Ordner, protokolliert mit Suchbegriff und Trefferzahl
.t&t=Schnelllink ohne Anmeldung: doc_token (SHA-256, aktiv, nicht abgelaufen), optionales Passwort, dl=1 nur bei Token mit allow_download=1, Bytes über Proxy, Trefferzähler, Protokoll; ungültig → neutrales 404; kein Wasserzeichen auf diesem Weg

Bekannte Einschränkungen

  • Eine Begrenzung der Anmeldeversuche gibt es im Code nicht.
  • Die Wege gview und Schnelllink setzen kein Wasserzeichen.