Ebene 5 (Betreiber) kann sich jetzt auf der Account-Detailseite über
einen Button je Nutzer als dieser Kunden-Login anmelden, ohne dessen
Passwort zu kennen — für Support-Fälle, in denen der Betreiber
nachvollziehen muss, was ein Kunde sieht. Nicht für deaktivierte
Nutzer möglich. Neue Spalte session.impersonated_by_user_id (Migration
0014, store.CreateImpersonatedSession) hält fest, wer die Sitzung
ausgelöst hat — die Nav zeigt während der gesamten Sitzung einen
auffälligen Banner ("Support-Zugriff durch ..."), damit nie unklar
ist, im Kontext eines fremden Kontos zu handeln. Jede Nutzung erzeugt
einen audit_log-Eintrag. Die neue Sitzung ersetzt die eigene
Betreiber-Sitzung (kein Sitzungs-Stack) — nach der Nutzung meldet sich
der Betreiber mit den eigenen Zugangsdaten neu an.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
31 lines
893 B
HTML
31 lines
893 B
HTML
{{define "betreiber-account-detail"}}<!doctype html>
|
|
<html lang="de">
|
|
<head>{{template "head" .}}</head>
|
|
<body>
|
|
{{template "nav" .Nav}}
|
|
<div class="page">
|
|
<p><a href="/betreiber/accounts">← Alle Accounts</a></p>
|
|
<h1>{{.Name}}</h1>
|
|
<p class="hinweis">Angelegt am {{.CreatedAt}}</p>
|
|
|
|
<h2>Nutzer</h2>
|
|
<ul class="beteiligte">
|
|
{{range .Users}}
|
|
<li class="beteiligter">
|
|
<div class="beteiligter-kopf">
|
|
{{.Email}} <span class="rolle">({{.Role}})</span>
|
|
{{if not .Active}}<span class="status">deaktiviert</span>{{end}}
|
|
</div>
|
|
{{if .Active}}
|
|
<form method="post" action="/betreiber/accounts/{{$.AccountID}}/nutzer/{{.ID}}/anmelden-als" onsubmit="return confirm('Als {{.Email}} anmelden? Ihre eigene Sitzung wird dabei ersetzt.')">
|
|
<button type="submit">Als Nutzer anmelden</button>
|
|
</form>
|
|
{{end}}
|
|
</li>
|
|
{{end}}
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|
|
{{end}}
|