Rollen & Berechtigungen
DocPlatform verwendet rollenbasierte Zugriffskontrolle (RBAC), gestützt durch benutzerdefiniertes RBAC, eine In-Process-Autorisierungs-Engine. Berechtigungen werden in unter 0,1ms pro Prüfung ausgewertet, ohne externen Dienst.
Rollenhierarchie
DocPlatform definiert 5 öffentlich sichtbare Rollen in einer strikten Hierarchie. Höhere Rollen erben alle Berechtigungen niedrigerer Rollen.
Super Admin ← Org-Eigentümer / Kontoersteller (höchste öffentliche Rolle)
│
Admin ← Workspace-Einstellungen, Mitglieder, Git, Theme verwalten
│
Editor ← Seiten erstellen und bearbeiten (pro Workspace konfigurierbar)
│
Commenter ← Seiten ansehen, Kommentare hinterlassen
│
Viewer ← Nur Seiten ansehen
Platform Owner ist eine interne Rolle für selbst-gehostete Betreiber zur Plattformwartung (Datenbankmigrationen, Lizenzverwaltung, Systemkonfiguration). Sie erscheint nicht in der Benutzeroberfläche oder API und ist nicht Teil der öffentlichen Rollenhierarchie.
Berechtigungsmatrix
| Berechtigung | Viewer | Commenter | Editor | Admin | Super Admin |
|---|---|---|---|---|---|
| Seiten ansehen | Ja | Ja | Ja | Ja | Ja |
| Inhalte suchen | Ja | Ja | Ja | Ja | Ja |
| Kommentare hinterlassen | Ja | Ja | Ja | Ja | |
| Seiten bearbeiten | Ja | Ja | Ja | ||
| Seiten erstellen | Konfigurierbar | Ja | Ja | ||
| Seiten löschen | Konfigurierbar | Ja | Ja | ||
| Assets hochladen | Ja | Ja | Ja | ||
| Org-Mitglieder dem Workspace zuweisen | Ja | Ja | |||
| Workspace-Mitglieder entfernen | Ja | Ja | |||
| Mitgliederrollen ändern (im Workspace) | Ja | Ja | |||
| Workspace-Einstellungen verwalten | Ja | Ja | |||
| Theme & Navigation verwalten | Ja | Ja | |||
| Externe Benutzer zur Org einladen | Ja | ||||
| Workspaces erstellen/löschen | Ja | ||||
| Git-Remote konfigurieren | Ja | ||||
| Abrechnung & Abonnement verwalten | Ja | ||||
| Zugriff auf alle Workspaces | Ja | ||||
| Org-Einstellungen verwalten | Ja |
Konfigurierbare Editor-Berechtigungen
Editor-Fähigkeiten können pro Workspace angepasst werden. Admins und Super Admins konfigurieren diese in den Workspace-Einstellungen:
| Einstellung | Standard | Beschreibung |
|---|---|---|
editor_can_create_pages |
true |
Editoren können neue Seiten erstellen |
editor_can_delete_pages |
false |
Editoren können Seiten löschen |
Wenn eine Berechtigung deaktiviert ist, sehen Editoren die Aktion ausgegraut in der Oberfläche und erhalten 403 Forbidden von der API.
Rollen zuweisen
Erster Benutzer (Super Admin)
Der erste Benutzer, der sich auf einer neuen DocPlatform-Instanz registriert, erhält automatisch die Super Admin-Rolle. Dies geschieht nur einmal — nachfolgende Registrierungen erhalten keine Workspace-Rolle, bis sie eingeladen werden.
Der Super Admin ist der Org-Eigentümer und Kontoersteller. Er hat die volle Kontrolle über alle Workspaces, Abrechnung, Git-Verbindungen und externe Benutzereinladungen.
Externe Benutzer einladen
Nur der Super Admin kann externe Benutzer zur Organisation einladen:
Web-Oberfläche: Org Settings → Members → Externen Benutzer einladen
API:
curl -X POST http://localhost:3000/api/v1/org/invitations \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"default_role": "editor"
}'
Der eingeladene Benutzer tritt der Organisation bei und kann dann von jedem Admin oder Super Admin einem Workspace zugewiesen werden.
Mitglieder zu Workspaces zuweisen
Admins weisen bestehende Org-Mitglieder ihrem Workspace zu. Admins können keine externen Benutzer einladen — das kann nur der Super Admin.
Web-Oberfläche: Workspace Settings → Members → Mitglied hinzufügen → aus Org-Mitgliedern auswählen → Rolle auswählen
API:
curl -X POST http://localhost:3000/api/v1/workspaces/:id/members \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"user_id": "01HY5K3M7Q8P",
"role": "editor"
}'
Standardrolle
Setzen Sie die Standardrolle für neue Mitglieder, die eine Einladung ohne spezifisch zugewiesene Rolle annehmen:
# .docplatform/config.yaml
permissions:
default_role: viewer
Verfügbare Werte: viewer, commenter, editor, admin
Zugriffskontrolle auf Seitenebene
Überschreiben Sie Workspace-weite Berechtigungen auf einzelnen Seiten über Frontmatter. Frontmatter-Zugriffsregeln beschränken innerhalb der Rolle eines Benutzers — sie gewähren niemals Berechtigungen über die Rolle hinaus.
Syntax der Zugriffskontrolle
Verwenden Sie rollen- und benutzerbasierte Zugriffsregeln, um zu steuern, wer auf eine Seite zugreifen kann:
---
title: Internal Security Policy
access:
roles: ["security-team", "engineering-leads"]
users: ["@01HY5K3M7Q8P"]
---
| Feld | Werttyp | Beschreibung |
|---|---|---|
access.roles |
Liste von Rollennamen | Rollen, die auf diese Seite zugreifen können |
access.users |
Liste von @user_id |
Einzelne Benutzer, die auf diese Seite zugreifen können |
Regeln:
- Benutzer-IDs mit
@voranstellen, um einzelne Benutzer anzusprechen - Super Admin und Admin haben immer Zugriff, unabhängig von Frontmatter-Regeln
- Frontmatter kann nur einschränken — eine Seite kann keinen Zugriff über die Workspace-Rolle des Benutzers hinaus gewähren
Beispiele
Öffentliche Seite (Standard — alle Workspace-Mitglieder können ansehen):
---
title: Getting Started
---
Auf bestimmte Teams eingeschränkt:
---
title: Infrastructure Runbook
access:
roles: ["security-team", "sre-team"]
---
Eingeschränkt mit individuellem Benutzerzugriff:
---
title: Budget Proposal
access:
roles: ["finance-team"]
users: ["@01HY5K3M7Q8P"]
---
Was eingeschränkter Zugriff bedeutet
Wenn eine Seite access-Regeln hat:
- Benutzer ohne die erforderliche Rolle können die Seite nicht ansehen
- Die Seite erscheint nicht in Suchergebnissen für nicht autorisierte Benutzer
- Direkter URL-Zugriff gibt 403 Forbidden zurück
Zugriff auf veröffentlichte Dokumentation
Für die veröffentlichte Dokumentationsseite (/p/{slug}/...) funktioniert die Zugriffskontrolle anders:
- Alle veröffentlichten Seiten sind standardmäßig öffentlich — keine Anmeldung erforderlich
- Um eine Anmeldung für die gesamte veröffentlichte Seite zu erzwingen, setzen Sie
PUBLISH_REQUIRE_AUTH=true— dies gilt für alle Seiten in allen Workspaces - Zugriffskontrolle auf Seitenebene in veröffentlichten Dokumenten (z. B. eine Seite workspace-only machen, während andere öffentlich sind) ist für eine zukünftige Version geplant
In v0.5 wird das
access-Frontmatter-Feld gespeichert und steht für zukünftige Verwendung bereit, wird aber auf veröffentlichten Routen nicht erzwungen. Verwenden SiePUBLISH_REQUIRE_AUTHfür seitenweite Zugriffsbeschränkung.
Interne Rollenstufen
Als Referenz: Jede Rolle wird einer numerischen Stufe zugeordnet. Höhere Stufen erben alle Berechtigungen niedrigerer Stufen:
| Rolle | Stufe | Bereich | Minimale Aktion |
|---|---|---|---|
| Viewer | 10 | Workspace | read |
| Commenter | 20 | Workspace | read, comment |
| Editor | 30 | Workspace | read, comment, edit (+ create/delete wenn aktiviert) |
| Admin | 40 | Workspace | Alle Workspace-Aktionen |
| Super Admin | — | Org | Umgeht alle Workspace-Prüfungen |
Super Admin ist eine Org-Ebene-Rolle — sie umgeht Workspace-Berechtigungsprüfungen vollständig, anstatt eine numerische Stufe zu haben. Platform Owner ist ein boolesches Flag auf dem Benutzerdatensatz, das alle Prüfungen global umgeht.
Aktionen haben Mindeststufen: read erfordert Stufe 10+, comment erfordert 20+, edit erfordert 30+, write/delete erfordert 40+ (Editoren erhalten edit, aber nicht write/delete, es sei denn, die konfigurierbaren Flags sind aktiviert), admin erfordert 40+. Die Rollenstufe eines Benutzers wird mit der Mindeststufe der Aktion verglichen.
Wie Berechtigungen ausgewertet werden
API Request
│
▼
Auth Middleware
(extract JWT, identify user)
│
▼
Permission Middleware
(benutzerdefiniertes RBAC: user + role + resource + action)
│
├── Allowed → proceed to handler
│
└── Denied → 403 Forbidden
5-Schritte-Auswertungsablauf
- Ist der Benutzer Platform Owner? → ERLAUBEN (globaler Bypass)
- Ist der Benutzer Org Super Admin für die Organisation dieses Workspaces? → ERLAUBEN (Org-Bypass)
- Workspace-Rolle des Benutzers nachschlagen → wenn kein Mitglied, VERWEIGERN
- Erreicht die Rollenstufe das Minimum für die Aktion? → vergleiche
role_level >= action_min_level, plus Editor-Berechtigungsflags - Hat die Seite Zugriffsregeln im Frontmatter? → prüfe
access.roles/access.users, EINSCHRÄNKEN innerhalb der Rolle
Frontmatter SCHRÄNKT innerhalb der Rolle EIN, es GEWÄHRT niemals darüber hinaus. Ein fehlerhaftes Frontmatter fällt standardmäßig in den strikten Modus — Seite nur für Admins zugänglich.
Leistung
| Metrik | Wert |
|---|---|
| Engine | Benutzerdefiniertes RBAC (In-Process, In-Memory) |
| Auswertungszeit | < 0,1ms pro Prüfung |
| Batch-Prüfung | < 1ms pro 100 Seiten |
| Cache | Versioniert (automatische Invalidierung bei Rollen- oder Berechtigungsänderung) |
| Policy-Speicherung | SQLite (beim Start in den Speicher geladen) |
Berechtigungs-Caching
Benutzerdefinierte RBAC-Policies werden beim Serverstart aus SQLite in den Speicher geladen. Änderungen an Rollen oder Frontmatter-Zugriffsdeklarationen lösen eine Cache-Invalidierung aus:
- Admin ändert die Rolle eines Benutzers → Berechtigungs-Cache-Version wird inkrementiert
- Editor aktualisiert Seiten-Frontmatter mit neuen
access-Regeln → Cache für diese Seite invalidiert - Nächste Berechtigungsprüfung lädt aktuelle Policy aus SQLite
Der Cache ist versioniert, nicht zeitbasiert — es gibt kein Fenster mit veralteten Berechtigungen.
Gängige Muster
Schreibgeschützte öffentliche Dokumentation mit eingeschränkten internen Seiten
# Die meisten Seiten: keine Zugriffsregeln (offen für alle Workspace-Mitglieder)
# Interne Seiten: eingeschränkt
---
title: Incident Response Playbook
access:
roles: ["sre-team", "admin"]
---
Editor erstellt, Admin veröffentlicht
- Setzen Sie
publishing.default_published: falsein der Workspace-Konfiguration - Editoren erstellen und bearbeiten Seiten (standardmäßig unveröffentlicht)
- Admins überprüfen und schalten
published: trueum
Team-spezifische Workspaces
Erstellen Sie separate Workspaces pro Team mit unabhängigen Mitgliederlisten:
eng-docsWorkspace → Engineering-Teamproduct-docsWorkspace → Produktteaminternal-wikiWorkspace → alle
Super Admin hat Zugriff auf alle Workspaces für teamübergreifende Sichtbarkeit.
Pläne und Sitzplatzlimits
Sitzplatzzählung
Super Admin, Admin und Editor zählen alle zum max_editors-Sitzplatzlimit des Plans. Commenter- und Viewer-Rollen sind bei allen Plänen unbegrenzt und zählen nie zu einem Sitzplatzlimit.
Wenn das Sitzplatzlimit erreicht ist, können neue Org-Mitglieder weiterhin eingeladen werden — sie können aber nur als Commenter oder Viewer zugewiesen werden, bis ein Platz frei wird.
Community Edition
Die Community Edition ist kostenlos und selbst-gehostet, kein Lizenzschlüssel erforderlich:
| Ressource | Limit |
|---|---|
| Workspaces | Unbegrenzt |
| Editoren (Super Admin + Admin + Editor) | Unbegrenzt |
| Viewer und Commenter | Unbegrenzt |
| Seiten | Unbegrenzt |
Cloud-Pläne
| Free | Team | Business | |
|---|---|---|---|
| Workspaces | 1 | 3 | 10 |
| Sitzplätze (Super Admin + Admin + Editor) | 3 | 15 | 50 |
| Viewer & Commenter | Unbegrenzt | Unbegrenzt | Unbegrenzt |
| Seiten | 50 | 150 | 500 |
Mehr benötigt? Vertrieb kontaktieren für Enterprise-Pläne mit individuellen Limits, SSO und SLA.
Für vollständige Abrechnungsdetails siehe Abrechnung & Pläne.
Fehlerbehebung
„403 Forbidden" auf einer Seite, auf die ich Zugriff haben sollte
- Prüfen Sie Ihre Rolle: Profil → Workspace Membership
- Prüfen Sie das Frontmatter der Seite: enthält
access.rolesIhre Rolle? - Bitten Sie einen Workspace-Admin, Ihre Rollenzuweisung zu verifizieren
- Wenn Sie Editor sind, prüfen Sie, ob die Aktion
editor_can_create_pagesodereditor_can_delete_pagesals aktiviert erfordert
Berechtigungsänderungen werden nicht wirksam
Berechtigungsänderungen sollten sofort wirksam sein (Cache-Invalidierung ist synchron). Wenn nicht:
- Melden Sie sich ab und wieder an (aktualisieren Sie Ihre JWT-Token)
- Prüfen Sie die Server-Logs auf Cache-Invalidierungsfehler
- Führen Sie
docplatform doctoraus, um den Zustand des Berechtigungssystems zu verifizieren
Erster Benutzer ist nicht Super Admin
Dies tritt auf, wenn der erste Benutzer sich registriert, während die Datenbank bereits Benutzerdatensätze enthält (z. B. aus einer vorherigen Installation). Lösung:
- Server stoppen
- Datenbank löschen:
rm {DATA_DIR}/data.db - Server starten und erneut registrieren
Dies setzt alle Daten zurück. Verwenden Sie dies nur bei Neuinstallationen.
„Sitzplatzlimit erreicht" beim Einladen eines Mitglieds
Das max_editors-Limit des Plans wurde erreicht. Optionen:
- Einen bestehenden Admin oder Editor zu Commenter oder Viewer herabstufen, um einen Platz freizugeben
- Den neuen Benutzer als Commenter oder Viewer einladen (diese sind unbegrenzt)
- Ihren Plan für mehr Sitzplätze upgraden