2.1 KiB
type, id, status, created, milestone, priority, area, related
| type | id | status | created | milestone | priority | area | related | ||
|---|---|---|---|---|---|---|---|---|---|
| issue | 0049 | done | 2026-08-12 | M4 | medium | security |
|
Wiki.js: Authentik-OIDC + Rollen und Abschottung
Problem / Motivation
Der Kern der Wiki.js-Entscheidung (ADR-0014): Zugang und Sichtbarkeit nach Authentik-Gruppe, was Docusaurus nicht konnte.
Acceptance
- Authentik-OIDC als Login-Provider in Wiki.js (Gruppen-Claim gemappt) —
nativer Wiki.js-Login, kein Forward-Auth. Authentik-Provider mit Redirect-URI
https://wiki.axion1337.chat/login/<providerKey>/callback; Anwender und Admin rufen dieselbe URL auf, die Rolle entscheidet über Sicht/Bearbeiten. - Rollen über Gruppen:
- Admins: schreiben (read+write) Betriebs- und Anwenderhandbücher.
- Normale Nutzer: nur lesen — kein Schreiben.
- Abschottung: Anwender sehen die Betriebsdoku nicht (Pfad-/Seiten-Regeln
pro Gruppe,
/betrieb/*nur für die Betriebs-Gruppe). Betrieb darf Anwenderdoku lesen. - Verifiziert: Anwender-Konto sieht
/betriebnicht (nicht 403 mit sichtbarem Link, sondern gar nicht in Navigation/Suche); Nicht-Admin kann nichts editieren; Admin kann beides bearbeiten.
Notes
⚠️ Braucht die konkreten Authentik-Gruppen von sorb: welche Gruppe = Betrieb,
welche = Anwender, welche = Admin (Vorschlag: authentik Admins schreibt,
wiki-betrieb liest Betrieb+Anwender, wiki-anwender liest nur Anwender). Zugangs-
/Gruppenvergabe macht sorb selbst.
Erledigt 2026-08-13
Nativer Authentik-OIDC-Login live (hideLocal, Break-Glass /login?all). Rollen
umgesetzt — statt der 3-Gruppen-Skizze gilt sorbs Vereinfachung „Betrieb = Admin":
authentik Admins schreibt alles, wiki-anwender liest nur anwender/* + Startseite.
Abschottung end-to-end verifiziert: ein Test-Konto nur in wiki-anwender bekommt auf
JEDE betrieb/*-Seite HTTP 403 (Wiki.js checkAccess: match && !deny → Default-Deny),
home + anwender/* liefern 200; Navigation/Suche filtern per checkAccess mit; Guests
komplett gesperrt. → erledigt.