taskmanager/IMPLEMENTATION.md
Weapie 007802d56e
Some checks failed
check / verify (push) Failing after 1m22s
Document production rollout and verify complete legacy data migration
2026-10-06 16:03:50 +02:00

8.8 KiB

Umsetzung und Prüfstand

Stand: 06.10.2026. Branch: feature/security-rbac. Ausgangspunkt: c2e00ff13a90041c43bdbdbebff51362f557ac40. Änderungen liegen lokal vor; produktive Daten und Infrastruktur wurden nicht verändert. Das ursprüngliche Review beschreibt den Ausgangsstand.

Sicherheitskorrekturen und RBAC

  • Framework-/Auth-/Prisma-Abhängigkeiten und Lockfile aktualisiert; normale Installation, Typecheck, ESLint und Build wieder funktionsfähig.
  • Benutzer, Gruppen, Rollen und Permissions mit ASSIGNED/GROUP/GLOBAL eingeführt. Direkte und gruppenbasierte Zuweisungen; Verwaltung mit Anzeige effektiver Rechte und ihrer Herkunft.
  • Profilpflege von Rechtevergabe getrennt, Selbstbeförderung geschlossen, geschützte Administratoren und letzten aktiven Administrator abgesichert.
  • Aktuelle Rechte und Benutzerstatus bei jedem Zugriff; Session-Version für Passwortwechsel/Deaktivierung. Lokale Passwortanmeldung für verknüpfte OIDC-Konten gesperrt.
  • Private Dateispeicherung mit zufälligem Schlüssel, Inhaltsprüfung, Quoten, Request-/Upload-Limits und autorisierten Downloads. Öffentliche Upload-Pfade gesperrt, Cleanup-Jobs und Migrationsskript ergänzt.
  • Keine eingebauten Startpasswörter; expliziter Bootstrap mit Passwortwechselpflicht und Produktionsprüfung von Secret/HTTPS.
  • Einheitliche Zod-4-Validierung und API-Fehler, Origin-Prüfung, Login-Begrenzung, Versionskonflikte und korrekte PATCH-/Null-Semantik.
  • Pagination, leichte Listenobjekte und Scope-Indizes; korrekte Dashboard-Zähler und Sortierung neuer Aufgaben.
  • Docker-Standalone-Image und separates operations-Image, beide mit UID 1001 für private Dateien; explizite Migration statt Seed bei jedem Start.

Die alte Role-Spalte bleibt ausschließlich als Migrationshilfe erhalten. Startrollen sind Systemadministrator, Teamleitung, Koordinator, Bearbeiter und Teampool. Administrations-Permissions gelten nur global. Teampool-Übernahme verlangt tasks.claim und aktive Gruppenmitgliedschaft.

Erweiterungen

Erweiterung Implementierter Umfang
Historie/Audit Aufgabenhistorie, administratives paginiertes Audit-Log
Konten Einladung, einmaliger Passwort-Reset, Deaktivierung, optional OIDC mit ACR-Prüfung
Erinnerungen Benachrichtigungen, Fälligkeitseskalation, optional SMTP, Worker-Deduplizierung
Organisation Teams, Teampool, Standorttext und Projektfeld
Auffinden Prioritäten, Tags, gespeicherte Filter und Textsuche
Wiederverwendung Vorlagen, wiederkehrende Aufgaben
Planung Unteraufgaben, Checklisten, zyklusgeprüfte Abhängigkeiten
Ansichten Liste, Kanban, Kalenderagenda, Stapelaktionen mit Einzelergebnissen
Lebenszyklus Archiv, Wiederherstellung, optionale automatische Aufbewahrungsgrenze
Berichte Status, Rückstand, Prioritäten, Projekte, durchschnittliche Durchlaufzeit
Datenaustausch CSV/XLSX-Vorschau/Import/Export, ICS, widerrufbares Kalenderabonnement
Integrationen Eingeschränkte lesende API-Tokens, signierte Webhooks mit Host-/IP-Prüfung und Retries
Mobil Responsive Oberfläche und PWA-Manifest ohne vertraulichen Offline-Cache

Verifikation

Prüfung Ergebnis
Normales npm ci Erfolgreich, auch im Node-22-Docker-Build
Typecheck Erfolgreich
Unit-/Sicherheitstests 13 bestanden
PostgreSQL-Integration 2 bestanden: Worker und Upload-Migration
Playwright gegen Produktionsbuild 15 bestanden
Produktionsbuild Erfolgreich auf Host und in Docker/Node 22
Docker-Smoke-Test UID 1001; Login 200, unautorisierte Aufgaben 401, öffentliche Uploads 404; privater Speicher beschreibbar
Desktop/Mobil Screenshots geprüft, mobile Aufgabenliste ohne horizontales Überlaufen
ESLint 0 Fehler, 0 Warnungen; CI erzwingt --max-warnings=0
git diff --check Keine Whitespace-Fehler
npm audit --omit=dev 0 gemeldete Schwachstellen
Vollständiger npm audit, 06.10.2026 8 hohe transitive Build-/Entwicklungsbefunde aus der noch ungepatchten braces-Abhängigkeit; PostCSS-Befund behoben

Die Browser-/API-Tests prüfen Gruppenisolation, Eskalation, sofortigen Rechteentzug, deaktivierte Konten, private Downloads, letzten Administrator, CSRF, Änderungskonflikte, Archiv/Excel, Kalenderwiderruf, einmaligen Reset, Teampool und die SSO-Passwortsperre. Es gab beim schnellen Seitenwechsel zwei Servermeldungen über früh geschlossene Streams; die UI-Assertions und Tests bestanden.

Die Upload-Migration bewahrt Dateiinhalte und ist wiederholbar. Originaldateien bleiben seit dem Produktions-Upgrade-Paket im privaten Volume erhalten; die alte statische Auslieferung muss gesperrt sein. Ein separater Upgrade-Versuch mit Bestandsdaten prüfte E-Mail-Normalisierung, Rollenübernahme, Session-Entwertung, Bestandsgruppe und idempotente Ausführung. Tests verwenden lokale Testdatenbanken. Die separate Demo-Instanz läuft jetzt unter http://localhost:3110 mit Produktionsimages; siehe TESTBETRIEB.md. Der Host hat Node 20, das unterstützte Deployment und CI verwenden Node 22.

Offene Punkte und Grenzen

  • Verbleibende transitive braces-Buildbefunde, fehlenden Upstream-Patch und Eingrenzung dokumentiert SECURITY.md. PostCSS-Selector-Parser auf 7.1.6 aktualisiert und Build/Oberfläche geprüft.
  • SMTP, OIDC/MFA, Webhook-Zustellung, HTTPS-Proxy, echte Secrets, Backup/Restore, Monitoring und Lasttest müssen an der Zielinfrastruktur konfiguriert und abgenommen werden. Keine produktiven Nachrichten wurden versandt.
  • Aus Altrollen übernommene globale Rechte anhand der tatsächlichen Organisation eingrenzen; Gruppen nicht aus vorhandenen Namen erraten.
  • Separate Standort-/Projektstammdaten, sprachbasierter Volltextindex, detaillierte personelle Auslastungsplanung, native lokale MFA und Offline-Synchronisation sind nicht implementiert. Die Tabelle oben beschreibt den tatsächlichen Funktionsumfang.
  • Genau eine Worker-Instanz betreiben; keine verteilte Job-Lease-Verwaltung. E-Mail/Webhooks können nach Prozessabsturz doppelt zugestellt werden. Deaktivierte Webhooks blockieren die Zustellwarteschlange nicht mehr.
  • Malware-Scanning und manipulationssicheres externes Audit-Archiv bleiben Infrastrukturarbeiten.
  • Ungenutzte Altkomponenten, alte API-Hooks und Validierungen wurden entfernt; nicht mehr benötigte Kalender-/Animationspakete ebenfalls. Verbleibende Lint-Warnungen behoben; die Reset-Fragment-Hydrierung hat eine begründete lokale Regel-Ausnahme.

Upgrade und Betrieb: README.Docker.md. API und Mengengrenzen: API_DOCUMENTATION.md. Die Version ist lokal geprüft, noch nicht produktiv ausgerollt.

Betriebshärtung und laufende Vorführung

Webdienst mit schreibgeschütztem Root-Dateisystem, entferntem Capability-Satz, No-new-privileges und Healthcheck; Worker mit Heartbeat, Healthcheck und geordnetem SIGTERM-Ende. Produktionskonfiguration prüft HTTPS (HTTP-Ausnahme ausschließlich Loopback), vollständige optionale Integrationen, Quoten, Aufbewahrung und Zeitzone.

scripts/start-demo.ps1 baut und startet die isolierte Demo reproduzierbar und bewahrt vorhandene Daten. scripts/backup.ps1 erstellt ein konsistentes DB-/Datei-Backup mit Prüfsummen und startet Dienste auch nach Fehlern wieder. Restore-Übung: 3 Konten, 6 Aufgaben und 1 Dateieintrag in separater Datenbank wiederhergestellt; SHA-256 des separat entpackten PDFs stimmt mit dem Original überein.

Docker-Demo geprüft: Anmeldung, private PDF-Speicherung/-Download, Aufgaben- und Rechteoberfläche ohne Browserfehler. Kleiner Last-Smoke-Test: 50 autorisierte Listenabfragen, Parallelität 5, Median 43 ms, p95 55 ms auf diesem Rechner. Kein Kapazitätsnachweis für produktive Nutzerzahlen. PostgreSQL, Web und Worker melden healthy. nginx-HTTPS-Beispiel ist eine Vorlage; öffentliche Domain/Zertifikate und echte externe Dienste sind noch nicht konfiguriert.

Überarbeitung der Oberfläche (06.10.2026)

Die Arbeitsoberfläche nutzt durchgehend shadcn/Radix-Dialoge, Sheets, Tabs, Tabellen, Auswahlfelder, Bestätigungen und Lucide-Icons. Aufgaben, Detailansicht, Benutzer, Gruppen/Rollen und Integrationen wurden überarbeitet; Gruppen-/Rollenlöschung ist mit serverseitigen Schutzregeln ergänzt. Die Prüfergebnisse und der erhaltene Funktionsumfang stehen in UX-ABNAHME.md. Die aktualisierten Produktionsimages laufen weiterhin in der isolierten lokalen Demo.

Migration bestehender Produktivdaten

README.md und UPGRADE.md beschreiben den Betrieb und das Upgrade anhand einer separaten Restore-Kopie. Compose migriert Schema, Rollen und alle referenzierten Dateien vor dem Webstart. Kopien werden per SHA-256 verglichen; Originale bleiben erhalten. tests/upgrade.test.ts reproduziert das Originalschema und kontrolliert Konten, Aufgabenfelder, Kommentare, Anhangsbytes, Rollen und Wiederholbarkeit. Der Test sowie beide Integrationstests bestehen. Echte Produktivdaten wurden nicht angefasst.