M2 Umsetzung

This commit is contained in:
2026-07-12 01:07:35 +02:00
parent 66bdd38d54
commit 174fff6f31
10 changed files with 430 additions and 35 deletions
+15 -2
View File
@@ -24,10 +24,20 @@ export DB_USER="example_user"
export DB_PASS="example_password"
export DEV_AUTH_EMAIL="admin@test.local"
export DEV_AUTH_NAME="Test Admin"
# Optional: Standard ist var/sessions im Repository.
export APP_SESSION_PATH="/path/to/writable/sessions"
```
## Testdatenbank initialisieren
Migrationen anwenden:
```bash
php scripts/migrate.php
```
Dev-Admin und Basistestdaten anlegen:
```bash
php scripts/init-mysql-dev.php
```
@@ -53,6 +63,9 @@ der Port ueber die Ports-Ansicht weitergeleitet werden.
## Hinweise
- Der Dev-Login umgeht AD/LDAP und nutzt `DEV_AUTH_EMAIL`.
- Die Tabellen werden aus `database/mysql-dev-schema.sql` angelegt.
- Die Tabellen werden ueber `database/migrations/` angelegt.
- `database/mysql-dev-schema.sql` bleibt als historische Dev-Schema-Baseline
erhalten; der aktive Weg ist `scripts/migrate.php`.
- Session-Dateien liegen standardmaessig unter `var/sessions`; `var/` wird von
Git ignoriert.
- Der Dev-Modus ist nur fuer lokale Tests gedacht, nicht fuer Produktion.
+102
View File
@@ -0,0 +1,102 @@
# M2 Technisches Fundament
Stand: 2026-07-12
M2 fuehrt die technischen Grundbausteine fuer den SaaS-Umbau ein, ohne das
Legacy-Verhalten oder das bestehende Design zu veraendern.
## Ziel
- Versionierte Datenbankmigrationen statt loser Schema-Ausfuehrung.
- Zentrales Bootstrap fuer Umgebung, Session und CSRF-Helper.
- Bestehende Legacy-Seiten bleiben kompatibel.
- Layout-Trennung wird vorbereitet, aber noch nicht in bestehende Seiten
hineingezogen.
## Umgesetzte Bausteine
### Bootstrap
- `app/bootstrap.php` definiert zentrale Helfer:
- `app_env()`
- `app_is_dev()`
- `app_start_session()`
- `app_csrf_token()`
- `app_csrf_field()`
- `app_verify_csrf()`
- `app_require_csrf()`
- `config.php` laedt den Bootstrap und startet die Session mit sicheren
Cookie-Optionen.
- Sessions werden standardmaessig unter `var/sessions` abgelegt, weil die
lokale PHP-Umgebung keinen beschreibbaren Systempfad garantiert. `var/` ist
von Git ignoriert. Der Pfad kann ueber `APP_SESSION_PATH` ueberschrieben
werden.
- CSRF ist bewusst noch nicht global erzwungen. Die vorhandenen POST-Seiten
werden spaeter einzeln umgestellt, damit keine Formulare oder Spezialflows
brechen.
### Migrationen
- `database/migrations/0001_legacy_mysql_baseline.sql` bildet die bisherige
MySQL-Dev-Baseline als erste versionierte Migration ab.
- `scripts/dev-db.php` verwaltet `schema_migrations` und fuehrt neue
Migrationen idempotent aus.
- `scripts/migrate.php` ist der direkte Runner fuer Migrationen.
- `scripts/init-mysql-dev.php` nutzt ab jetzt ebenfalls die Migrationslogik.
### Layout
- `header.php` und `footer.php` bleiben vorerst Legacy-Wrapper.
- Die spaetere Trennung in Public-Layout und App-Layout wird erst umgesetzt,
wenn die neue Route-/View-Struktur steht.
- Die bestehende HTML5-UP-Struktur, Sidebar und Assets bleiben unveraendert.
## Ausfuehrung
Mit normaler PHP-CLI:
```bash
php scripts/migrate.php
php scripts/init-mysql-dev.php
php scripts/check-golden-master.php
php scripts/http-smoke.php
```
In der aktuellen lokalen Umgebung:
```bash
LD_LIBRARY_PATH="$PWD/.local/php/usr/lib/x86_64-linux-gnu:$PWD/.local/php/usr/lib/x86_64-linux-gnu/sasl2" \
"$PWD/.local/php/usr/bin/php8.3" \
-c "$PWD/.local/php-dev.ini" \
scripts/migrate.php
```
Die Skripte erwarten die bekannten Dev-Umgebungsvariablen `DB_HOST`, `DB_NAME`,
`DB_USER` und `DB_PASS`. `scripts/init-mysql-dev.php` braucht zusaetzlich
`DEV_AUTH_EMAIL`.
## Aktueller Pruefstatus
- Migration `0001_legacy_mysql_baseline.sql` erfolgreich angewendet.
- Zweiter Migrationslauf meldet: Datenbank ist aktuell.
- PHP-Syntax fuer Bootstrap, Migrationen, Init-Skript und Config ist sauber.
- Session-Start laeuft in der lokalen Dev-Umgebung ohne PHP-Warnings ueber
`var/sessions`.
- Golden Master weiterhin gruen mit 104 Assertions.
- HTTP-Smoke weiterhin gruen mit 14 sicheren Seiten.
## Bewusste Grenzen
- Keine Tenant-/User-/Rollen-Tabellen in M2. Diese gehoeren zu M3.
- Keine globale CSRF-Erzwingung in M2. Die Absicherung der POST-Seiten erfolgt
schrittweise.
- Kein Layout-Umbau in M2. Die visuelle Struktur bleibt stabil.
- PDF-/Mail-/Jahresprozesse bleiben als M6-Themen offen.
## Naechste Schritte
1. POST-Seiten einzeln mit `app_csrf_field()` und `app_require_csrf()`
absichern.
2. Eine duenne View-/Layout-Struktur vorbereiten, ohne Header/Footer-Markup
sofort zu verschieben.
3. Danach M3 starten: Tenants, User, Registrierung, Login und Rollen.
+11 -3
View File
@@ -282,7 +282,7 @@ Uebersicht:
| --- | --- | --- |
| M0 | Baseline | Bestand, Sicherheit und Designreferenz sind dokumentiert |
| M1 | Golden Master | Legacy-Ergebnisse sind als Vergleichsbasis eingefroren; HTTP-Smoke prueft sichere Seiten |
| M2 | Technisches Fundament | Public-/App-Struktur, Bootstrap, Session und CSRF stehen |
| M2 | Technisches Fundament | Migrationen, Bootstrap, Session und CSRF-Helper stehen |
| M3 | SaaS-Basis | Tenants, User, Registrierung, Login und Rollen funktionieren |
| M4 | Datenmigration | Legacy-Daten sind tenant-sicher im Zielmodell abgebildet |
| M5 | App-Kern | Dashboard, Striche, Einzahlungen, Mitglieder und Liste laufen |
@@ -373,19 +373,27 @@ Schritte:
- Projektstruktur festlegen: Public-Routes, App-Routes, Views/Templates,
Services/Repositories.
- Zentrales Bootstrap fuer Config, DB-Verbindung, Session und Fehlerbehandlung.
- Layouts trennen: Public-Layout und App-Layout.
Begonnen mit `app/bootstrap.php`.
- Versionierte Migrationen einfuehren. Begonnen mit
`database/migrations/0001_legacy_mysql_baseline.sql` und
`scripts/migrate.php`.
- Layouts trennen: Public-Layout und App-Layout. Noch offen; Header/Footer
bleiben vorerst Legacy-Wrapper.
- Bestehende Assets weiterverwenden.
- CSRF- und Session-Basis einziehen.
- CSRF- und Session-Basis einziehen. Session und CSRF-Helper sind vorhanden;
globale Erzwingung erfolgt schrittweise pro POST-Seite.
- Konfigurationswerte aus Code in Umgebung oder Settings verschieben.
Ergebnis:
- Grundgeruest fuer neue SaaS-App.
- Kein fachlicher Rewrite, aber klare Struktur fuer die Migration.
- Dokumentation: `docs/m2-technical-foundation.md`.
Abhaengigkeiten:
- Entscheidung, ob PHP nativ weitergefuehrt oder ein Framework genutzt wird.
- M2 bleibt bewusst ohne Tenant-/User-/Rollen-Tabellen; diese starten in M3.
### M3: Mandanten, Registrierung und Login