Benutzerverwaltung als Popup (Einstellungen + Admin), Tabelle nur Anzeige

Anlegen/Bearbeiten von Nutzern erfolgt jetzt wie bei Assets über URL-gesteuerte
Popups (?new/?edit, modal.tsx) statt Inline in der Tabelle.

- Neue generische Komponenten: user-table.tsx (reine Anzeige-Tabelle, Zeilen
  verlinken auf ?edit, Button auf ?new) und user-forms.tsx (UserCreateForm /
  UserEditForm; Name/E-Mail + Rollen + Status + Passwort-Reset; Einmal-Passwort
  im Popup). Actions werden als gebundene Props übergeben — dieselben Formulare
  für Plattform- und Mandanten-Verwaltung.
- /settings/users und /admin/[id] rendern die Tabelle + Modals; die alten
  Inline-Komponenten (platform-tenant-users, tenant-users-manager) entfernt.
- Einstellungen: „Benutzer & Rollen"-Kachel ist als Ganzes klickbar (Link).

Browser-verifiziert: Anlegen im Popup (Einmal-Passwort + Fertig), Zeilenklick
öffnet Bearbeiten-Popup vorbefüllt; Admin-Portal analog. tsc + lint + build +
Guard-Check grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-22 11:24:37 +02:00
co-authored by Claude Opus 4.8
parent 959d8162d6
commit 73c98137ea
7 changed files with 295 additions and 315 deletions
+3 -3
View File
@@ -30,13 +30,13 @@ export default async function SettingsPage() {
<PageHead crumb="Organisation" title="Einstellungen" sub="Unternehmensdaten, Branding, Sicherheits-Policy — Stammdaten speisen die ISMS-Variablen" />
{(hasPermission(session, "user:manage") || hasPermission(session, "role:manage")) && (
<div className="shadow-card mt-4 flex items-center justify-between rounded-xl border bg-card p-5">
<Link href="/settings/users" className="shadow-card mt-4 flex items-center justify-between rounded-xl border bg-card p-5 transition-colors hover:bg-muted/40">
<div>
<p className="font-heading text-sm font-semibold">Benutzer &amp; Rollen</p>
<p className="text-[12px] text-muted-foreground">Benutzer anlegen/verwalten, Rollen und Berechtigungen pflegen (mandantenintern).</p>
</div>
<Button nativeButton={false} render={<Link href="/settings/users" />}>Öffnen</Button>
</div>
<span className="text-[13px] font-semibold text-[var(--primary)]">Öffnen </span>
</Link>
)}
<form action={updateTenantSettings} className="mt-4 grid gap-5 lg:grid-cols-[1fr_320px]">