docs(PROJ-69,PROJ-70): Deployment-Status auf Deployed setzen

Beide Features auf 132 und 131 deployed (2026-07-07). PROJ-69/PROJ-70
ohne vollständigen Browser-/E2E-Test, nur Smoke-Tests — offene QA-Punkte
in den Spec-Dateien dokumentiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sysops
2026-07-07 01:26:37 +02:00
co-authored by Claude Sonnet 5
parent ba0c519b00
commit 28565f089d
3 changed files with 95 additions and 8 deletions
+2 -2
View File
@@ -84,8 +84,8 @@
| PROJ-66 | Backup-Strategie für Store, Keyfile, PostgreSQL (Produktiv + Teilproduktiv) | Deployed | [PROJ-66](PROJ-66-backup-strategie.md) | 2026-07-04 |
| PROJ-67 | Manticore Search Upgrade 25.0.0 → 27.1.5 + Auto-Upgrade-Pfad | Deployed | [PROJ-67](PROJ-67-manticore-upgrade-25-zu-27.md) | 2026-07-05 |
| PROJ-68 | sudo-Provisionierung für Admin-Dienststeuerung fehlte komplett | Deployed | [PROJ-68](PROJ-68-sudo-provisionierung-dienststeuerung.md) | 2026-07-05 |
| PROJ-69 | Admin-Dashboard Tab-Gruppierung (2-Ebenen-Navigation) | Planned | [PROJ-69](PROJ-69-admin-tabs-gruppierung.md) | 2026-07-06 |
| PROJ-70 | User-Self-Service IMAP-Rückholung (Archiv-Mail zurück ins Postfach) | In Review | [PROJ-70](PROJ-70-imap-rueckholung-self-service.md) | 2026-07-07 |
| PROJ-69 | Admin-Dashboard Tab-Gruppierung (2-Ebenen-Navigation) | Deployed | [PROJ-69](PROJ-69-admin-tabs-gruppierung.md) | 2026-07-06 |
| PROJ-70 | User-Self-Service IMAP-Rückholung (Archiv-Mail zurück ins Postfach) | Deployed | [PROJ-70](PROJ-70-imap-rueckholung-self-service.md) | 2026-07-07 |
<!-- Add features above this line -->
@@ -0,0 +1,74 @@
---
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.
@@ -1,7 +1,7 @@
---
id: PROJ-70
title: User-Self-Service IMAP-Rückholung (Archiv-Mail zurück ins Postfach)
status: Planned
status: Deployed
created: 2026-07-07
---
@@ -132,11 +132,24 @@ Mail- und IMAP-Handler dupliziert):
`fetch`, um das `error`-JSON-Feld als `Error.message` durchzureichen).
- `npx tsc --noEmit -p .` lief sauber durch (Exit 0).
**Noch offen:** QA gegen Acceptance Criteria (insb. Tenant-Isolation-Test,
Sichtbarkeits-Gating), Kompilierung/Deploy auf 132.
## QA Test Results
_wird nach Umsetzung ergänzt._
Nur Smoke-Tests, kein vollständiger E2E-Test:
- 132: Backend/Frontend kompilieren, Dienste laufen, `imap_restore_enabled`-
Spalte vorhanden, `PATCH /api/auth/imap-restore` und
`POST /api/mails/{id}/restore` liefern 401 (Auth erforderlich) statt 404 —
Endpoints korrekt registriert.
- 131: identische Smoke-Test-Ergebnisse.
- **Nicht getestet** (bewusst, keine Produktiv-/Test-Zugangsdaten angefasst):
echter Login-Flow, Passwort-Bestätigungs-Dialog, Restore-Button-
Sichtbarkeit, 422-Fehlermeldung bei Postfach-Ablehnung,
Tenant-Isolation-Test (User A → Postfach von User B). Empfehlung: mit
dediziertem Testuser nachholen (QA Engineer oder integration-tester-Skill).
## Deployment
_wird nach Abschluss ergänzt._
- 2026-07-07, 192.168.1.132 (Test): 2x `update.sh` (Self-Update-Timing,
siehe PROJ-67/68), Migration lief, Dienste `active`, Health-Check grün.
- 2026-07-07, 192.168.1.131 (Produktiv): identisch, 2x `update.sh`, Migration
lief, Dienste `active`, Health-Check grün. Kein Login mit
Produktiv-Zugangsdaten durchgeführt.