Namespace-Management¶
Namespaces sind die zentrale Multi-Tenant-Einheit in edocs.cloud. Jeder Namespace isoliert Inhalte, Design, Events und Konfiguration für einen Mandanten.
Übersicht¶
graph TB
NS[Namespace] --> Pages[Seiten]
NS --> Menus[Menüs]
NS --> Footer[Footer-Blöcke]
NS --> Events[Events & Kataloge]
NS --> Design[Design-Tokens]
NS --> Wiki[Wiki-Artikel]
NS --> News[News-Artikel]
NS --> Tickets[Tickets]
NS --> Domains[Custom Domains]
NS --> Tokens[API-Tokens]
Beteiligte Dateien:
src/Service/NamespaceService.phpsrc/Repository/NamespaceRepository.phpsrc/Service/NamespaceValidator.phpsrc/Service/NamespaceResolver.phpsrc/Service/NamespaceContext.phpsrc/Service/NamespaceAccessService.phpsrc/Service/NamespaceBackupService.phpsrc/Controller/Admin/NamespaceController.phpsrc/Controller/Admin/NamespaceApiTokenController.php
Namespace-Regeln¶
| Regel | Wert |
|---|---|
| Pattern | ^[a-z0-9][a-z0-9-]*$ |
| Max. Länge | 100 Zeichen |
| Validierung | NamespaceValidator (src/Service/NamespaceValidator.php) |
CRUD-Operationen¶
Admin-Oberfläche¶
| Aktion | Route |
|---|---|
| Liste | GET /admin/namespaces |
| Daten (JSON) | GET /admin/namespaces/data |
| Erstellen | POST /admin/namespaces |
| Aktualisieren | PUT /admin/namespaces/{id} |
| Löschen | DELETE /admin/namespaces/{id} |
MCP¶
Der list_namespaces-Aufruf ist direkt in der McpToolRegistry implementiert und listet alle aktiven Namespaces auf.
Namespace-Auflösung¶
Jeder HTTP-Request durchläuft die Middleware-Kette zur Namespace-Auflösung:
flowchart TD
A[Request eingehend] --> B{Query-Parameter?}
B -->|?namespace=xyz| C[Namespace aus Parameter]
B -->|Nein| D{URL-Pfad?}
D -->|/m/slug/ oder /landing/| E[Namespace aus Marketing-URL]
D -->|Nein| F{Domain bekannt?}
F -->|Ja| G[Namespace aus Domain-Mapping]
F -->|Nein| H[RuntimeException]
C --> I[NamespaceContext]
E --> I
G --> I
Priorität¶
- Expliziter Parameter –
legalPageNamespace,pageNamespace,namespaceAttribut - Domain-basiert –
domainNamespaceoderDomainService-Lookup - Fehler – Kein Namespace gefunden → RuntimeException
Das Ergebnis ist ein NamespaceContext-Value-Object mit:
namespace– Aufgelöster Namespacecandidates– Alle Kandidatenhost– Normalisierter HostnameusedFallback– Fallback-Namespace verwendet
Benutzer-Zuordnung¶
Benutzer werden über die user_namespaces-Tabelle Namespaces zugewiesen:
| Feld | Beschreibung |
|---|---|
user_id |
Benutzer-ID |
namespace |
Namespace-Slug |
is_default |
Standard-Namespace des Benutzers |
Der NamespaceAccessService prüft in der RoleAuthMiddleware, ob ein Benutzer Zugriff auf den angeforderten Namespace hat. Administratoren haben automatisch Zugriff auf alle Namespaces.
API-Tokens¶
Jeder Namespace kann eigene API-Tokens für die REST-API erstellen:
| Aktion | Route |
|---|---|
| Token-Übersicht | GET /admin/namespaces (API-Tokens Tab) |
| Token-Liste (JSON) | GET /admin/namespaces/api-tokens |
| Token erstellen | POST /admin/namespaces/api-tokens |
| Token widerrufen | PUT /admin/namespaces/api-tokens/{id}/revoke |
| Token löschen | DELETE /admin/namespaces/api-tokens/{id} |
Tokens sind an Scopes gebunden: cms:read, cms:write, seo:write, menu:read, menu:write, news:read, news:write.
Export/Import¶
Der NamespaceBackupService ermöglicht den vollständigen Export und Import eines Namespace:
Export¶
Enthält alle Namespace-Daten als JSON:
- Seiten (inkl. Blocks, SEO-Config)
- Menüs und Items
- Footer-Blöcke
- Events und Kataloge
- Teams und Ergebnisse
- Design-Tokens
- Wiki-Artikel
- Projekt-Einstellungen
Import¶
Destruktive Operation
Der Import löscht alle bestehenden Daten des Namespace vor der Wiederherstellung.
Zugriff über:
- Admin:
/admin/backups - MCP:
export_namespace/import_namespace
Seitenbaum¶
Seiten innerhalb eines Namespace bilden eine Baumstruktur über parentId. Der Baum kann über folgende Wege abgerufen werden:
| Zugang | Pfad |
|---|---|
| Admin-UI | /admin/projects/tree |
| API v1 | GET /api/v1/namespaces/{ns}/pages/tree |
| MCP | get_page_tree |