tests / ci (push) Canceled after 0s
- 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>
137 lines
6.7 KiB
Markdown
137 lines
6.7 KiB
Markdown
# 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.
|