Files
tibi-docs/src/content/docs/nova/test-plans/42-impersonation.md
T

2.9 KiB

title
title
Impersonation (Admin → User Session)

Impersonation (Admin → User Session)

Scope

  • Impersonation einer Benutzersession durch einen Admin
  • POST /login/impersonate Endpoint im Mock-Interceptor
  • UI-Trigger im UserDetailDrawer (Button + ConfirmDialog)
  • Amber-Banner im AdminLayout mit Stop-Button
  • Rollback zur Admin-Session via stopImpersonation()
  • Berechtigungen: SystemAdmin (role=0) kann alle User impersonaten; OrgAdmin nur User in eigenen Orgs (Serverseitig geprüft)

Prerequisites

  • Run in mock mode only (real impersonation requires live tibi-server)
  • Admin-Benutzer admin (role=0) und Ziel-User maria.schmidt (u2) existieren
  • Zweiter Admin peter.gross (u7) existiert für Admin-auf-Admin-Tests
  • Relevant spec: tests/e2e/impersonation.spec.ts

Test Cases

ID Description Expected Result Priority
IMP-01 Admin sieht "Als Benutzer einloggen"-Button im UserDetailDrawer Button mit mdiLogin Icon ist sichtbar für role=0 High
IMP-02 Admin klickt Impersonate → ConfirmDialog erscheint ConfirmDialog variant="info" mit Titel und Nachricht High
IMP-03 Admin bestätigt Impersonation → Weiterleitung zu /projects Amber-Banner "Eingeloggt als @maria.schmidt" sichtbar; User-Menü zeigt Maria Schmidt High
IMP-04 Impersonation-Banner zeigt korrekte Impersonation-Info Banner enthält "(Impersonation SystemAdmin)" High
IMP-05 Stop-Button im Banner → Admin-Session wiederhergestellt Zurück zu /projects mit Admin-User im User-Menü; Banner verschwunden High
IMP-06 Nicht-Admin (role=1) sieht KEINEN Impersonate-Button Button ist nicht sichtbar für maria.schmidt High
IMP-07 Admin sieht Impersonate-Button NICHT für sich selbst admin (u1) kann sich nicht selbst impersonaten Medium
IMP-08 Admin-zu-Admin Impersonation (admin → peter.gross) funktioniert Impersonation auf peter.gross möglich; Banner zeigt "@peter.gross" Medium
IMP-09 Impersonation-Banner verschwindet nach page.reload() sessionStorage stellt impersonatedBy-State wieder her Medium
IMP-10 Admin sieht Impersonate-Button auch für User ohne Org/Team solo.user (u8) hat Impersonate-Button Low

Edge Cases

  • Impersonation des eigenen Users: Button muss versteckt sein (canImpersonate = isAdmin && user.id !== currentUser.id)
  • Mock-Interceptor lehnt Impersonation ab, wenn currentUser nicht role=0 ist (403)
  • Mock-Interceptor gibt 404 bei unbekannter userId
  • Nach Stop-Impersonation muss die Admin-Original-Session wiederhergestellt sein (via singleRefresh)
  • Bei fehlendem Original-Token (sessionStorage gelöscht) → full logout (Fallback)

Accessibility

  • Amber-Banner hat data-ai-id="impersonation-banner" für Test-Selektion
  • Stop-Button hat data-ai-id="impersonation-stop-btn"
  • Impersonate-Button hat data-ai-id="impersonate-btn"
  • Farbkontrast: Amber auf hell/dunkel erfüllt WCAG AA