Commit Graph
7 Commits
Author SHA1 Message Date
msolarczekandClaude Opus 4.8 2ec0230f57 Doku: Konsolidierte Übergabe des dev-Stands (PM + neue Entwickler)
Neues Dokument docs/STAND-dev-branch.md fasst alle Entwicklungstätigkeiten
auf dev zusammen: Produktionshärtung (Pakete 1-3), Benutzer-/Rollenverwaltung
(A/B/C), Freigabe-Workflow + Aufgaben-Modul, Richtlinien-Governance und
GAP-Report (WP1-4, E2). Enthält fachlichen Status für PM, technische
Landkarte (neue Modelle, 6 Migrationen, Auth-Architektur, Modul-Guards,
Fallstricke), Commit-Übersicht und nächste Schritte.

HANDOVER-DEV.md und HANDOVER-PM.md verweisen prominent darauf.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 17:25:45 +02:00
msolarczekandClaude Opus 4.8 742277f4b4 Doku: Benutzer-Popups, Aufgaben-/Freigabe-Modul, Richtlinien-Governance, Demo-Approver
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 11:42:12 +02:00
msolarczekandClaude Opus 4.8 d38b265e09 Benutzer bearbeiten (Name/E-Mail) + Kern-Einstellungen nur Superadmin
Nachschärfung der Benutzer-/Rollenverwaltung auf Basis des Feedbacks.

- Nutzer editierbar: Name & E-Mail (eindeutig je Mandant) je Nutzer in beiden
  Konsolen — updateTenantUser (Plattform) / updateUser (Tenant), inline-Formular
  in platform-tenant-users.tsx und tenant-users-manager.tsx. Rollen/Status/Reset
  bestanden bereits (browser-verifiziert: Name/E-Mail, Rollen, Deaktivieren, Reset).
- Kern-Einstellungen ausschließlich Superadmin: TISAX-/Schutzbedarf-Tiefe wandert
  in die Admin-Konsole (setTenantTisaxLevel, AL2/AL3 in /admin/[id]); aus den
  Tenant-Einstellungen entfernt (nur noch Read-only-Anzeige). updateTenantSettings
  fasst tisaxLevel/Schutzbedarf-Flags nicht mehr an. Module waren bereits Superadmin.
- Tenant-Einstellungen: „Benutzer & Rollen"-Bereich verlinkt und sichtbar
  (user:manage/role:manage) — Verwaltung unter /settings/users.

Browser-verifiziert: Admin-Konsole editiert Name/E-Mail/Rollen/Status/Passwort und
schaltet TISAX AL3; /settings zeigt Benutzer-Bereich + TISAX read-only;
/settings/users listet Nutzer mit Editierfeldern. tsc + lint + build + Guard grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 10:16:55 +02:00
msolarczekandClaude Opus 4.8 303dcd0004 Doku: Produktionshärtung + Benutzer-/Rollenverwaltung in HANDOVER-DEV/PM
- HANDOVER-DEV §10: neue Härtungs-/Verwaltungspakete dokumentiert (Modul-Guard,
  Plattform-Admin-Store + optionale MFA, nicht-destruktiver Re-Import, Benutzer-/
  Rollenverwaltung, Force-Change, Passwort-Policy, Nutzer-MFA) inkl. Dateiverweise;
  §11 aktualisierte Einstiegspunkte (Paket 4 SMTP, tenant-weite MFA-Pflicht).
- HANDOVER-PM: Statusblock „Neu auf dev" mit umgesetzten Paketen; Paket 4 als
  zurückgestellt markiert. Stand/Branch-Zeilen aktualisiert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 09:46:32 +02:00
msolarczekandClaude Opus 4.8 e07dcd9f2a Nicht-destruktiver Richtlinien-Re-Import (Phase-1-Härtung Paket 3)
Der Re-Import löschte bisher alle Policy-Zeilen und legte sie neu an — das setzte
per-Dokument-Status, TISAX-Override, Freigabe/Version und nutzergepflegte
Variablenwerte zurück. Jetzt Diff/Upsert über stabile Schlüssel, verlustfrei.

- Schema: PolicyDocument.archivedAt + PolicyRequirement.archivedAt (Lifecycle,
  orthogonal zum Freigabe-status). Migration additiv/nullable.
- import-policies.ts komplett auf Reconcile umgebaut:
  - Dokumente (code): neu→anlegen; vorhanden→nur Inhaltsfelder aktualisieren,
    Status/Version/Owner/Freigabe/Override bleiben; fehlend→archivedAt setzen
    (deaktivieren, nicht löschen); Wiederauftauchen→reaktivieren.
  - Anforderungen (reqId): analog inkl. Deaktivierung entfernter Anforderungen.
  - Variablen (key): Metadaten aktualisieren, aber value NIE überschreiben
    (Kundenpflege); fehlende bleiben bestehen (als obsolet ausgewiesen).
  - Baseline (blId) und Nachweise (nr): Upsert; fehlende bleiben erhalten.
  - Deaktivierung greift nur im Paket-Namensraum (L00/R*/VA-*/BASELINE/NACHWEIS)
    — verwaltete Register aus import-managed (CRYPTO/RISKMATRIX/CLASSIFICATION/
    HANDBUCH) werden nicht angetastet.
- Änderungsreport (added/updated/archived/reactivated/unchanged/obsolete) wird
  zurückgegeben und ins Audit-Log geschrieben (Entity policy_package). Option
  { dryRun: true } liefert die Vorschau ohne Schreibzugriff. Idempotent.
- Aktive Ansichten (Bibliothek/Coverage, Dokument-Detail) filtern archivedAt: null;
  Historie bleibt per Direktlink erreichbar.

Akzeptanztest scripts/test-reimport.ts: Status/Override/Einreicher + Variablenwert
bleiben nach Re-Import erhalten, entfernte Anforderung wird deaktiviert (nicht
gelöscht), verwaltete Register unberührt, zweiter Lauf idempotent. Browser: /policies
rendert unverändert (30 Dokumente). tsc + lint + build + Guard-Check grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 13:46:42 +02:00
msolarczekandClaude Opus 4.8 8e4040d1da Separater Superadmin-Store + eigener Login + MFA-Pflicht (Phase-1-Härtung Paket 2)
Plattform-Administratoren sind nicht länger isPlatformAdmin-Nutzer innerhalb eines
Mandanten, sondern ein getrennter Store mit eigener Auth-Domäne — Voraussetzung
für den sicheren Betrieb beim ersten echten Kunden.

Store & Migration
- Neues Modell PlatformAdmin (kein tenant_id): Argon2id-Hash, TOTP-Secret,
  Recovery-Codes (nur SHA-256-Hashes), Fehlversuchszähler + Sperre, lastLogin.
- AuditLog.tenant_id nullable → mandantenlose Plattform-Ereignisse (scope=platform).
- Datenmigration: bestehende isPlatformAdmin-Nutzer in den neuen Store übernommen
  (gleicher Hash → Login sofort möglich), Flag mandantenweit auf false gesetzt.

Getrennter Login + MFA
- Zweite NextAuth-Instanz (server/platform-auth.ts) mit eigenem Cookie und
  eigenem basePath /api/platform-auth; Session trägt bewusst KEINEN tenantId.
- TOTP-MFA (otplib): Enrollment beim ersten Login (/platform/enroll-mfa, QR +
  Klartext-Secret), danach bei jedem Login erzwungen; 10 einmalige Recovery-Codes.
- Härtung: Konto-Sperre nach 5 Fehlversuchen (15 min), Audit aller Anmeldungen,
  Fehlversuche und Sperren (scope=platform).

Autorisierung / Trennung
- Admin-Konsole nach (platform)/admin verschoben; (platform)/layout.tsx erzwingt
  Plattform-Session + aktivierte MFA. Mandanten-Session hat KEINEN Zugriff auf /admin.
- Mandanten-Shell zeigt keinen /admin-Link mehr; admin-Actions prüfen die
  Plattform-Session statt des abgelösten Flags.
- provision/seed setzen isPlatformAdmin nicht mehr; Seed legt den Demo-Plattform-
  Admin (admin@demo.example) im getrennten Store an.

Browser-verifiziert: Plattform-Login → erzwungenes MFA-Enrollment → Recovery-Codes →
/admin; Login ohne Code scheitert (?error=1); Mandanten-Session auf /admin wird auf
/platform/login umgeleitet. tsc + lint + build + Guard-Check grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 20:55:12 +02:00
msolarczekandClaude Opus 4.8 081c00043a Übergabe-Dokumente: PM-Statusbericht + Entwickler-Onboarding
- docs/HANDOVER-PM.md: umgesetzte Module + offene Themen nach Priorität (Hoch/
  Mittel/Niedrig) mit grobem Aufwand (S/M/L) für die Weiterplanung.
- docs/HANDOVER-DEV.md: Repo/Zugriff (Gitea HTTP, Token im Schlüsselbund),
  Tech-Stack + Versionen, vollständige Setup-Anleitung (Compose/Prisma/Seed/Dev),
  Architektur & Konventionen (Tenant-Guard, RLS, RBAC, Modul-Gating, Prisma-7-
  Migrationsflow), Verzeichnisstruktur, Fallstricke, Einstiegspunkte.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 10:46:24 +02:00