--- id: PROJ-69 title: Admin-Dashboard Tab-Gruppierung (2-Ebenen-Navigation) status: Deployed created: 2026-07-06 --- ## Problem `/admin` zeigt 17 flache Tabs in einer Zeile (`src/app/admin/page.tsx:152-175`). Für superadmin fast alle sichtbar, unübersichtlich, schlecht skalierbar. ## Ziel Zweistufige Navigation: Gruppe → Tab, analog zu bestehenden rollenbasierten Sichtbarkeitsregeln (`isSuperAdmin`, `canViewDSGVO`, etc.). Kein neues shadcn-Primitive, nur Layout-Umbau. ## Gruppen 1. **Übersicht** — Dashboard, Dienste (superadmin) 2. **Benutzer & Zugriff** — Benutzer, LDAP (Global, superadmin), LDAP (Tenant), Mandanten (superadmin) 3. **Compliance** — Audit-Log, DSGVO-Anfragen (canViewDSGVO), Retention (superadmin), Archivierungs-Regeln (superadmin) 4. **Mail-Eingang** — Import, IMAP-Einstellungen, Routing-Regeln, SMTP-Out (superadmin), Quotas (superadmin) 5. **System** — Security (superadmin), Zertifikat (superadmin), Module (superadmin) ## Acceptance Criteria - [ ] Gruppen-Leiste über der bestehenden `TabsList` (z.B. Button-Segmentleiste oder zweite `Tabs`-Ebene), Klick auf Gruppe zeigt nur ihre Sub-Tabs. - [ ] Eine Gruppe wird nur angezeigt, wenn mindestens ein Tab darin für die aktuelle Rolle sichtbar ist (kein leerer Gruppen-Button). - [ ] Bestehende rollenbasierte Sichtbarkeit pro Tab bleibt unverändert (`isSuperAdmin`, `canViewDSGVO`, `tenantAccessAllowed()`-Muster etc.). - [ ] Für nicht-superadmin-Rollen (admin, domain_admin, domain_auditor): nur Gruppen mit sichtbaren Tabs erscheinen — z.B. domain_auditor sieht vermutlich nur "Compliance" + evtl. "Benutzer & Zugriff". - [ ] Deep-Link/Reload auf einen Tab (z.B. `?tab=users`) bleibt funktionsfähig falls das aktuell schon unterstützt wird (prüfen). - [ ] Keine Funktionalität der einzelnen Tabs verändert, nur Navigation/Layout. - [ ] Responsive: Gruppen-Leiste bricht auf Mobile sinnvoll um (analog `.claude/rules/frontend.md` — 375px/768px/1440px). ## Non-Goals - Keine neuen Tabs/Features, reine Navigations-Restrukturierung. - Keine Backend-/API-Änderungen. ## Implementation Notes `src/app/admin/page.tsx` (Commit 3b2a838): 5 Gruppen (Übersicht, Benutzer & Zugriff, Compliance, Mail-Eingang, System) als Button-Leiste über der bestehenden shadcn `Tabs`. Klick filtert sichtbare `TabsTrigger`, `TabsContent` bleibt unverändert im DOM (Radix matched weiter per `value` unabhängig von der Gruppen-Filterung). Rollenbasierte Sichtbarkeit pro Tab 1:1 übernommen, keine Funktionsänderung. `npx tsc --noEmit` lief sauber. ## QA Test Results Kein Browser-/E2E-Test mit den 3 Rollen durchgeführt (Testuser-Frage blieb ungeklärt, siehe Memory `project_proj69_admin_tabs_status`). Deploy auf User-Anweisung trotzdem durchgeführt (2026-07-07): Frontend-Build auf 131 lief sauber, `/admin` liefert HTTP 200. Funktionale Prüfung der Rollen-Filterung steht noch aus. ## Deployment - 2026-07-07, 192.168.1.132 (Test) und 192.168.1.131 (Produktiv), je `update.sh` (2 Läufe wegen Self-Update-Timing, siehe PROJ-67/68). Frontend-Build erfolgreich, `/admin` erreichbar.