Benutzerverwaltung, Firmenstamm und Rollenlegende

Die Verwaltung war bisher eine reine Anzeige. Sie gliedert sich jetzt in vier
Reiter und ist handlungsfähig.

Benutzer
- Zugänge anlegen, bearbeiten, sperren und entsperren
- Startkennwort wird erzeugt und genau einmal angezeigt, auf Wunsch zusätzlich
  per E-Mail versandt; es liegt nirgends im Klartext
- Kennwort zurücksetzen beendet zugleich alle laufenden Sitzungen
- Wer sich mit einem Startkennwort anmeldet, wird unmittelbar zur Vergabe eines
  eigenen Kennworts geführt; bis dahin weist ein Streifen im Kopfbereich darauf hin
- Zugänge werden gesperrt, nicht gelöscht: Bautagebucheinträge, Prüfvermerke und
  Bescheinigungen müssen dauerhaft einer Person zuordenbar bleiben

Aussperrschutz
- der eigene Zugang lässt sich weder sperren noch die eigene Administration entziehen
- es muss stets mindestens ein aktiver Administrationszugang bestehen
- Firmen mit bestehenden Verträgen lassen sich nicht stilllegen

Firmen
- Stammdaten mit Art, Anschrift, Kreditorennummer und USt-IdNr., stilllegbar

Rollen und Rechte
- Legende aller Rollen, getrennt nach Auftraggeber- und Auftragnehmerseite
- vollständige Rechtematrix, unmittelbar aus PERMISSIONS erzeugt und damit nicht
  von der Wirklichkeit im Code trennbar
- Übersicht der Projektschalter und der fest verdrahteten Sperren

Protokoll
- Filter nach Aktion und Person, Blätterung, haftungsrelevante Vorgänge hervorgehoben

Nebenbei behoben
- next.config: "output: standalone" entfernt, weil es sich mit "next start" nicht
  verträgt; nicht mehr unterstützten eslint-Schlüssel entfernt
- Unterlagen des Auftraggebers (*.xlsx) gehören nicht ins Repository

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
duffyduck
2026-08-11 13:22:42 +02:00
co-authored by Claude Opus 5
parent 807b7ce541
commit 8af6b384ea
15 changed files with 1495 additions and 139 deletions
+35 -1
View File
@@ -51,6 +51,10 @@ Bewusst schmal gehalten – vier bewegliche Teile, keine Fremddienste:
- **Eigene Session-Authentifizierung** (bcrypt, HttpOnly-Cookie) statt zusätzlichem Auth-Dienst
- **Nodemailer** gegen ein beliebiges SMTP-Relais; im Testbetrieb Mailpit
Kennwörter liegen als bcrypt-Hash (Kostenfaktor 11). Sitzungen sind serverseitig in der
Datenbank hinterlegt und lassen sich dadurch gezielt beenden – beim Sperren eines Zugangs,
beim Zurücksetzen eines Kennworts und bei jeder Kennwortänderung.
### Persistenz ohne Named Volumes
Alle persistenten Daten liegen als Bind-Mount direkt im Compose-Verzeichnis:
@@ -78,7 +82,7 @@ SHA-256-Prüfsumme in der Datenbank, nachträgliche Veränderungen sind erkennba
| **Stunden & Aufmaß** | Auftragnehmer reicht ein, Bauüberwachung erkennt **zeilenweise** an – das ist die Messlatte der Rechnungsprüfung |
| **Rechnungsprüfung** | Automatischer Abgleich gegen Vertrag, Aufmaß, Stundenzettel und Vorrechnungen; getrennte Bescheinigung *sachlich richtig* / *rechnerisch richtig* / Zahlungsfreigabe |
| **Kommunikation** | Projektkanäle statt E-Mail-Pingpong, `@Nachname`-Erwähnungen, E-Mail-Benachrichtigung je nach Profileinstellung |
| **Verwaltung** | Benutzer, Firmen, revisionssicheres Protokoll aller Vorgänge |
| **Verwaltung** | Zugänge anlegen und sperren, Kennwörter zurücksetzen, Firmenstamm, Rollenlegende, revisionssicheres Protokoll |
### Rechnungsprüfung – geprüfte Befunde
@@ -226,6 +230,36 @@ Soll-Katalog nachziehen* fehlende Positionen nach und rechnet die Fristen aller
offenen Positionen neu. Einmal angelegte Positionen werden nie gelöscht – nicht mehr
zutreffende setzt man einzeln auf „entfällt“, dann bleibt der Grund dokumentiert.
### Benutzerverwaltung
Unter *Verwaltung* (nur für Zugänge mit Administrationsrecht), in vier Reitern:
| Reiter | Inhalt |
|---|---|
| **Benutzer** | Zugänge anlegen, bearbeiten, sperren und entsperren, Kennwort zurücksetzen |
| **Firmen** | Firmenstamm mit Art, Anschrift, Kreditorennummer und USt-IdNr. |
| **Rollen & Rechte** | Legende aller Rollen und die vollständige Rechtematrix – unmittelbar aus `rbac.ts` erzeugt und damit nie veraltet |
| **Protokoll** | Alle Vorgänge mit Filter nach Aktion und Person |
**Kennwörter.** Beim Anlegen wird ein Startkennwort erzeugt und **genau einmal** angezeigt
(auf Wunsch zusätzlich per E-Mail versandt). Es ist nirgends im Klartext gespeichert. Wer
sich damit anmeldet, landet unmittelbar auf der Profilseite und muss ein eigenes Kennwort
vergeben; bis dahin weist ein Streifen im Kopfbereich darauf hin. Ein Zurücksetzen durch die
Administration beendet zugleich alle laufenden Sitzungen.
**Zugänge werden gesperrt, nicht gelöscht.** Bautagebucheinträge, Prüfvermerke und die
Bescheinigungen *sachlich richtig* und *rechnerisch richtig* müssen auch nach Jahren einer
Person zuordenbar bleiben – bei bis zu 38 Jahren Aufbewahrung nach Bauschlussmeldung ist das
keine Nebensache. Sperren beendet sofort alle Sitzungen.
**Aussperrschutz.** Der eigene Zugang kann weder gesperrt noch der eigenen Administration
entzogen werden, und es muss stets mindestens ein aktiver Administrationszugang bestehen.
Firmen mit bestehenden Verträgen lassen sich nicht stilllegen.
**Projektrollen werden nicht hier vergeben**, sondern im jeweiligen Projekt unter
*Einstellungen → Beteiligte*. Das Administrationsrecht ist davon unabhängig und wirkt
projektübergreifend – entsprechend sparsam vergeben.
### Absichtliche Sperren
Diese Einschränkungen sind keine Lücken, sondern Zweck der Sache: