Wir haben eine leere Statamic-Installation ohne Starter-Kits und ohne vorgefertigte Themes ausgeliefert. Statamic bietet zwar Starter-Kits zur Beschleunigung der Entwicklung (Design-Systeme, Page Builder, Boilerplate-Content), aber wir haben bewusst ohne diese gebaut.
Das Fundament nutzt Statemics Eloquent Driver, um alle Inhalte und Konfigurationen in der Datenbank zu persistieren und so echte Multi-Tenancy auf der Datenebene zu ermöglichen. Dieser Ansatz gab SchleeGleixner die volle Kontrolle, ihre Design-Delivery-Workflows zu bauen, ohne unnötige Strukturen zu erben.
Tenant-Auflösung bei SchleeGleixner: Die Tenant-Identifikation erfolgt automatisch über die Subdomain. Wenn eine Anfrage bei clientA.schlegleixner.com eingeht, fängt eine Middleware die Subdomain ab, fragt die Tenants-Tabelle ab, ermittelt die Tenant-ID und injiziert sie in den Application Container. Jede nachfolgende Operation: Datenbankabfragen, Dateispeicherung, Authentifizierungsprüfungen – erbt diesen Tenant-Kontext.
Auf die technische Implementierung folgt das Root-Domain-Routing. Dieses wird in Laravels routes/web.php konfiguriert. Die Root-Domain (schlegleixner.com) dient als Landing Page oder Administrative Interface, während Subdomains zu tenant-spezifischen Umgebungen routen. In unserem Fall zur Content- und Benutzerverwaltung, die vollständig datenbankgestützt ist. Alle Content-Einträge, Benutzerkonten und Berechtigungen liegen in der Datenbank mit tenant_id Foreign Keys. Das ermöglicht dynamischen, tenant-spezifischen Content ohne Filesystem-Kopplung.
Dann gibt es den Super User Zugang. Der Statamic Super User kann sich in jede Tenant-Umgebung einloggen – eine bewusste Design-Entscheidung von SchleeGleixner für die administrative Übersicht. Dieser Cross-Tenant-Zugriff ist nur für Super User vorgesehen; reguläre Tenant-Benutzer bleiben isoliert. Ebenso verhält es sich mit E-Mail- und Queue-Isolation. E-Mails, Queues und Jobs sind tenant-beschränkt. Wenn ein Job dispatched wird, trägt er die tenant_id in seinem Payload, was sicherstellt, dass Hintergrundprozesse (E-Mail-Benachrichtigungen, Asset-Verarbeitung) im korrekten Tenant-Kontext ausgeführt werden. Stencils Tenant-Aware Job Traits erledigen das automatisch.
Zusätzlich zur E-Mail- und Queue-Isolation gibt es Asset-Isolation. Hier werden Assets (Logos, Markenmaterialien, Deliverables) pro Tenant gekapselt. Dateipfade sind nach tenant_id mit Namespace versehen, was Cross-Tenant-Zugriff verhindert. Ein Kunde, der auf clientA.schlegleixner.com zugreift, kann nur Assets abrufen, die im Verzeichnis von Tenant A gespeichert sind. Statemics Content-Strukturen (Blueprints, Field Sets) werden tenant-übergreifend geteilt. Diese Zentralisierung ist beabsichtigt für SchleeGleixners Design-Delivery-Prozess, der einem standardisierten Workflow folgt. Das Teilen dieser Strukturen bedeutet, dass Updates am Content-Modell sofort an alle Tenants weitergegeben werden und Konsistenz ohne manuelle Synchronisation gewährleistet ist.
Rollen und Gruppen werden im Filesystem mit Statemics Standard-File-Driver gespeichert. Während Content und Benutzer datenbankgestützt sind, bleiben Berechtigungsstrukturen dateibasiert. Dieser hybride Ansatz balanciert Flexibilität (tenant-spezifische Benutzer) mit Einfachheit (global definierte Rollen). Diese Berechtigungen gewähren Authentifizierung und Asset-Zugriff. Der Bild-Abruf erfordert Authentifizierung. Wir haben eine authentifizierte Route implementiert, die drei Bedingungen prüft, bevor ein Bild ausgeliefert wird:
(1) Der Benutzer ist im aktuellen Tenant eingeloggt und hat eine aktive Session
(2) Das angeforderte Bild gehört zum Asset-Verzeichnis dieses Tenants
Wenn eine dieser Bedingungen fehlschlägt, wird die Anfrage abgelehnt. So wird sichergestellt, dass Benutzer von Tenant A keine URLs konstruieren können, um auf Assets von Tenant B zuzugreifen. Authentifizierung und Asset-Eigentümerschaft werden auf Anwendungsebene durchgesetzt, nicht nur durch Filesystem-Berechtigungen. Wenn ein Kunde clientA.schlegleixner.com besucht, wird er zum Login aufgefordert.
Nach der Authentifizierung ist seine Session auf Tenant A beschränkt. Er kann den Content von Tenant A durchsuchen, Assets in den Storage von Tenant A hochladen und die Deliverables von Tenant A ansehen. Aber er kann keine Ressourcen von Tenant B sehen oder auch nur anfragen. Die Tenant-Grenze ist absolut.