Benutzer, Teams, Tokens
Du verwaltest im tibi-admin (Verwaltungs-Backend, Release Nova), wer sich anmelden und was jede Person darf: Benutzerkonten, Teams, Organisationen, Rollen, persönliche Token (PATs) und die Stellvertretung. Server-Regeln dazu stehen unter Rechte und Tokens, die vier HTTP-Köpfe unter Token-Köpfe.
Anmelden und Sitzung
Abschnitt betitelt „Anmelden und Sitzung“- Login-Seite öffnen (
LoginPage.svelte): Benutzername und Passwort eingeben. - Bei Erfolg legt der Admin ein JWT in den Store und plant die Auffrischung (
scheduleTokenRefresh); danach landet du auf/projects. - Bei Sitzungsende warnt
SessionTimeoutWarning.svelte: 60-Sekunden-Countdown mit Verlängern- oder Abmelden-Knopf — ohne Reaktion folgt die Abmeldung. - Sprache (DE/EN) und Theme stellst du auf der Login-Karte um.
| Verhalten | Quelle |
|---|---|
| Fehlgeschlagener Login | Rote Fehlerbox, keine Weiterleitung |
| Inaktivitäts-Timer | utils/inactivityTracker + Countdown-Dialog (resetInactivityTimer) |
| Eigene Daten ändern | Profilseite („Mein Profil”): Name, E-Mail, Firma, Abteilung, Avatar, Passwort (min. 6 Zeichen, doppelt bestätigt) |
Personen, Teams, Orgs
Abschnitt betitelt „Personen, Teams, Orgs“Die Kette lautet Org → Team → Benutzer → Projekt. Du pflegst sie im Admin-Hub (components/admin/):
| Ebene | Komponenten | Inhalt |
|---|---|---|
| Benutzer | UserTab (Liste mit Suche, Filter, Sortierung, Paginierung), UserCreateDrawer, UserDetailDrawer |
Name, Login, Rolle, Org-/Team-Mitgliedschaften |
| Teams | TeamTab, TeamCreateDrawer, TeamDetailDrawer |
Name, Farbe, Org-Zugehörigkeit, Mitglieder, Berechtigungen |
| Projekte | ProjectAdminView, ProjectDetailDrawer, ProjectCreateDrawer |
Name, Status (online/offline), Org-Zuordnung, Rechte-Matrix |
Der Team-Drawer zeigt Einstellungen mit Name, Organisation, Beschreibung und Farbe, darunter die Berechtigungen als Chips (Eingabehilfe z.B. pages, media, admin, Knopf Berechtigung hinzufügen) und die Teammitglieder mit Benutzer anlegen.

Der Org-Drawer zeigt Einstellungen (Name, Branche, Ort, Website, Logo ersetzen / Logo entfernen), darunter Zugeordnete Teams (Team anlegen), Zugeordnete Benutzer (Benutzer anlegen) und Zugeordnete Projekte mit Metadaten (Erstellt, Aktualisiert).

- Org anlegen (
OrgCreateDrawer). - Team in dieser Org anlegen (
TeamCreateDrawer). - Benutzer anlegen und Team zuordnen (
UserCreateDrawer, Reiter Mitgliedschaften). - Projekt der Org zuordnen und Team-Rechte setzen (
ProjectDetailDrawer).

Rollen und Chips
Abschnitt betitelt „Rollen und Chips“| Rolle | Wert | Bedeutung |
|---|---|---|
| Admin | role: 0 |
Vollzugriff, violettes Badge (RoleSection.svelte) |
| Benutzer | role: 1 |
Zugriff nur über Org-/Team-Mitgliedschaft, neutrales Badge |
- Die Rolle stellst du per Auswahl um (mit Admin-Warnung); im Nur-Lesen-Modus zeigt der Admin nur das Badge.
- Feinrechte vergibst du als Chips (
PermissionChipsInput.svelte): Eintippen, Vorschlag anklicken oder per × entfernen. Die Vorschläge gruppiert der Admin nach Herkunft — aus der Projekt-Meta (project-meta) oder als Team-Rückfall (team-fallback); das Eingabefeld zeigt als Beispielpages, media.
Persönliche Token (PATs) pflegst du auf zwei Wegen: im eigenen Profil (TokenSettings.svelte) oder als Admin im Token-Reiter (TokenAdminTab.svelte).
Als Admin siehst du unter Tokens die Liste API-Tokens mit dem Untertitel Alle Tokens aller Benutzer. Je Zeile stehen Name, Besitzer, Prefix, Berechtigungen und Zuletzt benutzt. Über Aktualisieren lädst du die Liste neu; je Zeile änderst du den Namen (Bearbeiten) oder entziehst den Zugriff (Widerrufen). Anlegen geht nur im eigenen Profil.

Im Profil legst du über Neues Token einen Drawer mit Name (Beispiel z. B. CI Deploy) und Berechtigungen an. Die Scopes wählst du per Checkbox oder über Alles auswählen; dazu kommen Eigene Scopes (Wildcards) mit Hinzufügen. Ein Ablaufdatum gibt es in der Oberfläche nicht — das Feld existiert nur serverseitig und wird bewusst weder angezeigt noch gesetzt.

- Neu klicken →
TokenFormDrawer: Name plus Scopes perTokenScopePickerwählen. - Speichern →
TokenCreatedDialogzeigt den Wert genau einmal — kopiere ihn sofort, danach ist er weg. - Bearbeiten ändert nur wirklich geänderte Felder (Name/Scopes als Patch).
- Widerrufen per Löschen (
deleteToken→ Liste neu laden). - Antwortet der Server mit
404auf die Token-Liste, blendet der Admin den Bereich still aus (Feature-ErkennungisTokenFeatureDisabled). - Aufrufe laufen mit deiner Login-Sitzung (
X-Auth-Token-JWT viafetchWithAuth); Token-Verwaltung selbst braucht kein separates PAT. - Während einer Stellvertretung ist die Token-Verwaltung gesperrt (
disabled, solangeimpersonatedBygesetzt ist).
Projekt-Admin-Token
Abschnitt betitelt „Projekt-Admin-Token“Die Projektverwaltung (/admin/projects, ProjectAdminView.svelte) listet alle Projekte mit Organisation, Status und Kollektionen. Ein Klick öffnet den Detail-Drawer mit Einstellungen (Name, Organisation, Beschreibung, Namespace, Config-Datei), Team-Zuordnungen (Team zuordnen) und Zugehörige Benutzer. Die vier Token-Flags unten stehen nicht in der Oberfläche — sie kommen ausschließlich aus api/config.yml.

Der Admin ruft Reload, Suchindex-Aufbau, Backup und Snapshots mit einem Projekt-Token auf.
Welche dieser vier Operationen das Token darf, steuern vier Flags in api/config.yml (admin.tokens[]):
| Flag | Erlaubt | Wofür im Admin |
|---|---|---|
allowReload |
Projekt neu laden | Nach Config-Änderungen |
allowRegenerateSearch |
Suchindex neu aufbauen | Nach Index-Problemen (siehe Suche) |
allowBackup |
Backup herunterladen und wiederherstellen | Sicherung (siehe Audit und Backup) |
allowSnapshots |
Snapshots auslösen, listen, löschen, wiederherstellen, herunterladen | Versionierte Sicherung (siehe Audit und Backup) |
Schema: tibi-types/schemas/config/project.schema.json:227-261 (alle vier optional, nur token ist Pflicht); Server-Modell: tibi-server/internal/models/project.go:116-120.
admin: tokens: - token: "REDACTED_CREDENTIALS" allowReload: true allowRegenerateSearch: true allowBackup: true allowSnapshots: trueStellvertretung (Impersonation)
Abschnitt betitelt „Stellvertretung (Impersonation)“Admins können sich als ein Benutzerkonto anmelden, um dessen Sicht zu prüfen:
| Schritt | Technik (api/auth.ts) |
|---|---|
| Starten | POST /login/impersonate { userId } → neues Token + impersonatedBy-Vermerk |
| Erkennen | Banner/Status zeigt die Stellvertretung (AdminLayout, AdminHub, UserDetailDrawer) |
| Beenden | POST /login/impersonate?logout=1 → Server löscht den Stellvertretungs-Cookie und stellt die Admin-Sitzung wieder her |
| Fehlerbild | Ursache | Lösung |
|---|---|---|
| Login schlägt fehl | Falsche Zugangsdaten | Eingaben prüfen; Konto beim Admin erfragen |
| Countdown erscheint | Inaktivität | Sitzung verlängern oder neu anmelden |
| Benutzer/Team/Org fehlt | Keine Leserechte auf diese Ebene | Admin um Freigabe bitten |
| Token-Bereich leer | Server ohne Token-Feature (404) |
Normal — kein Fehler, Bereich bleibt verborgen |
permission denied |
Kopf oder Recht falsch | Token-Köpfe und Chips prüfen |
Klick-Abläufe zur Stellvertretung stehen im Test-Plan docs/test-plans/42-impersonation.md (Auslöser, Bestätigungsdialog, Banner, Rückkehr zur Admin-Sitzung — nur im Mock-Modus testen).
Verifiziert am 2b091d8 2026-10-17 (tibi-admin-nova); Projekt-Admin-Token verifiziert am 4c55f82 (tibi-types: project.schema.json:227-261), am 68b4278 (tibi-server: models/project.go:116-120)