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.