# 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///…` - 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.