Files

50 lines
2.1 KiB
Markdown
Raw Permalink Normal View History

---
type: issue
id: "0049"
status: done
created: 2026-08-12
milestone: M4
priority: medium
area: security
related: [docs/adr/0014-wikijs-loest-docusaurus-ab.md, docs/issues/0048-wikijs-in-der-suite-deployen.md]
---
# 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 `/betrieb` nicht (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.