Files
BauIN/docs/plaene/AP01-fundament.md
T
ChristophandClaude Opus 5.5 f62541ff13
tests / ci (push) Canceled after 0s
AP0 Schritte 0.4 und 0.6: Antworten vom 05.10. und Claude Design 0.3 eingearbeitet
- Fragenliste: erste Antworten von BauIn und ITM eingetragen, übrige Fragen auf „gestellt“
- Anmeldung mit eigenem Passwort, 2FA später Pflicht; keine E-Mails; Mehrfach-Upload ohne ZIP
- Nur Produktionsschlüssel: Tests rufen die echte API nie auf
- Stellungnahme BÜW und Österreich in Phase 2; „Vor dem Livegang zu klären“ in AP11
- Claude Design Stand 0.3 abgeglichen (AP13), Prüfmaske v4 in AP6
- Gitea von ITM als Push-Mirror eingetragen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 15:54:18 +02:00

137 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AP1 – Fundament: CI, Rechte, Benutzer, Projekte, Upload, Protokoll
| | |
|---|---|
| Status | in Arbeit; Schritte ab 1.5 detailliert, warten auf Freigabe |
| Aufwand | 1,25 PW offen (mit Claude Code) |
| Zeitraum | KW 40–43 |
| Meilenstein | M1 (30.10.) |
| Freigabe | offen |
## Ziel
Benutzer melden sich an, sehen nur die Projekte, in denen sie Mitglied sind, legen Projekte mit
PFA und Verträgen an und laden LV-Pakete hoch. Jede wichtige Aktion wird protokolliert.
## Umfang
**Enthalten:**
- CI
- Rechtekonzept und Policies
- Benutzerverwaltung
- Projektverwaltung (Projekt, PFA, Verträge, Auftragnehmer, Mitglieder)
- Upload (mehrere Dateien auf einmal, kein ZIP) und Download im privaten Speicher
- Protokoll
- Länderstruktur
**Nicht enthalten:**
- GAEB-Import (AP5)
- Anmeldung mit dem Microsoft-Konto (entfällt, B1)
- E-Mails jeder Art, auch Einladung und „Passwort vergessen“ (B3)
- Endgültiges Design (AP13): Die Oberflächen entstehen zuerst mit TallStackUI-Standard und
werden in AP13 angepasst.
## Voraussetzungen
- Fragen: A1 (Gliederung), A25 (Rollen). Beantwortet am 05.10.: B1 (eigenes Passwort, 2FA später
Pflicht), B3 (keine E-Mails), B4 (Mehrfach-Upload, kein ZIP, Ordner von Hand)
- D5 (Actions-Runner auf dem Synology-Gitea)
## Entscheidungen
| Nr. | Frage | Vorschlag | Entschieden |
|---|---|---|---|
| E1.1 | Projektrollen über eigene Tabelle oder Spatie-Teams? | Eigene Tabelle `projekt_mitglieder` (umgesetzt); globale Rollen über Spatie | offen |
| E1.2 | Protokoll: Paket oder eigene Tabelle? | `spatie/laravel-activitylog` (MIT, verbreitet) | offen |
| E1.3 | Neue Benutzer und vergessene Passwörter ohne E-Mail (B3) | Administrator vergibt ein Startpasswort, das bei der ersten Anmeldung geändert werden muss; er setzt auch vergessene Passwörter so zurück. „Passwort vergessen“ zeigt nur den Hinweis auf den Administrator | offen |
| E1.4 | Benutzer löschen oder nur deaktivieren? | Nur deaktivieren, damit Protokoll und Zuordnungen erhalten bleiben | offen |
| E1.5 | Darf der Administrator Projektinhalte sehen? | Nein, nur wenn er Projektmitglied ist | offen (A25) |
| E1.6 | 2FA-Pflicht (B1) | Schalter unter Verwaltung → Einstellungen, zunächst aus. Eingeschaltet muss jeder Benutzer 2FA einrichten, bevor er weiterarbeitet; der Administrator kann 2FA eines Benutzers zurücksetzen | offen |
## Schritte
- [x] **1.1** Entwicklungsumgebung, Repository, gitleaks-Hook
- [x] **1.2** Laravel 13, Livewire 4, TallStackUI 4, Fortify (2FA, Passkeys), Spatie,
Mehrsprachigkeit
- [x] **1.3** Nicht-funktionale Grundlagen: keine externen Ressourcen (Test), `CLAUDE.md`, Tech-Stack-Doku
- [x] **1.4** Datenmodell Kern (`docs/datenmodell.md`). Umgesetzt vor Freigabe.
- [ ] **1.4a** Review mit dir: Erklärung der Tabellen, Entscheidung E1.1
- [ ] **1.4b** Anpassen nach den Antworten A1, A4, A8 und A10 und an den Prototyp 0.3
(AP13, Abgleich): Projekt ohne Vertragsgrundlage im Formular, Suchbereich nur ein Schalter
„Andere Verträge im selben PFA einbeziehen“, Vertrag mit Gewerk und „Vertrag vom“
- [ ] **1.5** CI in Gitea Actions:
- Runner auf dem Synology prüfen bzw. einrichten (Skript von Claude Code, du führst es aus).
- Workflow mit `composer install`, `npm run build`, Tests gegen MySQL, Pint (`--test`),
PHPStan, Proxy-Tests und gitleaks.
→ Ergebnis: Jeder Push zeigt grün oder rot.
- [ ] **1.6** Rechtekonzept `docs/rechte.md` → Ergebnis: Rechte-Matrix zur Freigabe durch dich (vorläufig bis A25):
- Rollen: global Administrator (optional Regelverantwortlicher); je Projekt Projektleiter,
Bearbeiter, Leser
- Matrix Aktion × Rolle: Projekt sehen, anlegen, bearbeiten, archivieren; Mitglieder verwalten;
Dokumente hochladen, sehen, herunterladen; vertrauliche Dokumente; Nachträge anlegen,
zuweisen, prüfen; Export; Regeln vorschlagen und freigeben; Verwaltung
- Mandantentrennung und Regeln für archivierte Projekte (nur lesen)
- [ ] **1.7** Policies und Gates nach dem Rechtekonzept:
- zentrale Abfrage „Projekte des Benutzers“
- Mandanten-Scope
- vertrauliche Dokumente nur für freigegebene Personen
→ Ergebnis: Je Aktion ein Test mit und einer ohne Berechtigung.
- [ ] **1.8** Benutzerverwaltung (Administrator):
- Liste mit Suche
- Anlegen mit Startpasswort (E1.3), Bearbeiten, Passwort zurücksetzen, Deaktivieren (E1.4)
- Globale Rolle, Mandant, 2FA-Status; Schalter 2FA-Pflicht (E1.6)
→ Ergebnis: Verwaltung → Benutzer.
- [ ] **1.9** Projektverwaltung:
- Projektliste
- Projekt anlegen in drei Schritten wie im Prototyp „Projekt anlegen v3“: Projektdaten mit PFA
und Verträgen, Vertragsunterlagen (Upload aus 1.10), Prüfen und anlegen
- Mitglieder im Reiter „Berechtigungen“ des Projektdetails
- Bearbeiten, Archivieren (schreibgeschützt)
→ Ergebnis: Projekte → Neues Projekt.
- [ ] **1.10** Upload und Download:
- Speicher `storage/app/private/<mandant>/<projekt>/…`
- Mehrere Dateien auf einmal hochladen (Auswahl oder Ziehen), kein ZIP (B4); bis 200 MB je Datei
- Paarbildung PDF, X86, D86 nach Dateinamen. Die Ordner bei BauIn haben keine feste Struktur
(B4), deshalb werden PFA und Vertrag in der Anwendung gewählt bzw. je LV bestätigt
- Prüfung von Dateityp und Größe, Erkennung von Duplikaten (sha256)
- Download nur über eine Route mit Rechteprüfung
→ Ergebnis: LV-Paket hochladen, LVs als Datensätze mit Dokumenten.
- [ ] **1.11** Protokoll (E1.2):
- Anmeldung (Erfolg und Fehlschlag)
- Benutzer- und Rechteänderungen
- Projektänderungen
- Upload, Löschen, Herunterladen vertraulicher Dokumente
- Einstellungen und Exporte
→ Ergebnis: Verwaltung → Protokoll mit Filter.
- [ ] **1.12** Länderstruktur:
- Schnittstelle für länderspezifische Begriffe und Auswahllisten
- Umsetzung für DE, AT nur als Platzhalter
- Länderwahl nur bei mehr als einem freigeschalteten Land
## Abnahmekriterien
- Die Kriterien von M1 zu Benutzern, Projekten, Upload, Rechten und Protokoll sind erfüllt
(`docs/projektplan.md`, Abschnitt 5).
- Ein Benutzer ohne Mitgliedschaft erhält auf jeder Projekt-, Dokument- und Download-URL 403 oder 404.
- CI ist grün.
## Tests
- Feature-Tests je Aktion mit und ohne Berechtigung, auch für andere Mandanten.
- Upload: Paarbildung, zu große Datei, falscher Typ, Duplikat, viele Dateien auf einmal.
- Anmeldung: Startpasswort muss geändert werden; mit eingeschalteter 2FA-Pflicht kein Zugriff
ohne eingerichtete 2FA.
- Protokolleinträge für die genannten Ereignisse.
## Risiken
- Die Rollen ändern sich nach A25. Deshalb das Konzept zuerst schriftlich und die Policies zentral halten.
- Große Dateien und viele Dateien auf einmal: Upload-Grenzen in PHP, Nginx und Livewire
abstimmen und testen.