9.3 KiB
1. Zusammenfassung
Claude benennt mehrere valide Architektur-Risiken. Übernommen werden vor allem die Punkte, die direkt sicherheits-, compliance- oder konsistenzrelevant sind:
- Tenant-Isolation muss technisch erzwungen werden.
- Secrets dürfen nicht direkt in Fachmodellen gespeichert werden.
- Superadmin-Zugriffe brauchen Schutzmechanismen.
- Kritische Statuswechsel brauchen State Machines und Historisierung.
- Retry/DLQ-Verhalten muss begrenzt und beobachtbar sein.
- Domänensprache und Modulgrenzen müssen vereinheitlicht werden.
Nicht übernommen wird die Empfehlung „zurück ans Reißbrett“. Stattdessen werden konkrete Projektdateien ergänzt/geändert.
2. Übernommene Punkte
2.1 Tenant-Isolation
Übernehmen:
- PostgreSQL Row Level Security für tenant-bezogene Tabellen.
- Tenant-Kontext zentral auf Request-/Job-Ebene.
- Automatischer Model-Scope zusätzlich zu RLS.
- Tests gegen Cross-Tenant-Zugriffe.
2.2 Secrets-Management
Übernehmen:
- Keine API-Keys, Passwörter oder Auth-Codes direkt in Business-Tabellen.
- Speicherung nur als Secret-Referenz.
- Verschlüsselung at-rest über Secret-Backend.
- Rotation und Zugriffsaudit dokumentieren.
2.3 Audit-Log
Übernehmen:
- Hash-Chain allein reicht nicht als Revisionssicherheit.
- Audit-Log als append-only behandeln.
- Export/Archivierung für Compliance ergänzen.
- Keine Aussage „GoBD-konform“ ohne Verfahrensdokumentation.
2.4 Domain-Management
Übernehmen:
- Domainmodell um produktionsrelevante Attribute erweitern.
- Auth-Codes nur als Secret-Referenz.
- Status für Transfer-Lock, DNSSEC, Whois-Privacy und Expiry ergänzen.
2.5 Kritische Flows
Übernehmen:
- Vertragsstatus, Zahlungsstatus, Kündigungen und Domain-Transfers nicht als freies CRUD.
- State Machines einführen.
- Statusübergänge historisieren.
2.6 Adapter-Resilienz
Übernehmen:
- Circuit Breaker ergänzen.
- Health Checks je Adapter.
- Retry-Limits, Backoff-Caps und DLQ-Verhalten definieren.
2.7 Domänensprache
Übernehmen:
- Einheitliche Begriffe festlegen.
tenant_id,organisation_id,customer_id,kundenicht vermischen.- Fachsprache in Datenmodell, Code und API vereinheitlichen.
2.8 Versionierung von Produkten/Verträgen
Übernehmen:
- Preise, Produktbedingungen und Vertragsstände versionieren.
- Rechnungen müssen reproduzierbar bleiben.
2.9 Superadmin
Übernehmen:
- Superadmin-Zugriffe begrenzen.
- Break-Glass-Prozess dokumentieren.
- Kritische Aktionen auditieren.
- Optional 4-Augen-Freigabe für besonders kritische Aktionen.
3. Abgelehnte oder verschobene Punkte
Abgelehnt
-
„Zurück ans Reißbrett“
Nicht notwendig. Die Kritikpunkte werden als konkrete Architektur- und Implementierungsänderungen eingearbeitet. -
Vollständiges Event Sourcing für alle kritischen Flows sofort
Zu groß für den nächsten Schritt. Stattdessen: State Machines, Statushistorien, Audit-Events. -
Vollständige Microservice-Aufteilung nach Bounded Contexts
Wird nicht sofort umgesetzt. Ziel bleibt zunächst ein modularer Monolith mit klaren Modulgrenzen.
Verschoben
-
Externer Timestamp-Service für Audit-Logs
Später prüfen. Kurzfristig wichtiger: append-only Audit, Export, Archivierung, Berechtigungsschutz. -
Vollständiges DNS-Record-Management
Nur umsetzen, wenn das Backoffice tatsächlich DNS-Zonen verwalten soll. Kurzfristig werden Domain-Statusfelder ergänzt. -
Formale GoBD-Zertifizierung
Verschoben. Zuerst technische Grundlagen und Verfahrensdokumentation vorbereiten.
4. Neue/geänderte Dateien
Architektur / ADRs
Neu:
docs/adr/0020-tenant-isolation-rls.mddocs/adr/0021-secrets-management.mddocs/adr/0022-audit-log-and-archiving.mddocs/adr/0023-state-machines-for-critical-flows.mddocs/adr/0024-adapter-resilience-circuit-breaker.mddocs/adr/0025-domain-language.mddocs/adr/0026-superadmin-break-glass.mddocs/adr/0027-product-contract-versioning.md
Ändern:
docs/adr/0017-adapter-resilience.md
Security / Tenancy
Neu:
app/Support/Tenancy/TenantContext.phpapp/Http/Middleware/ResolveTenantContext.phpapp/Models/Concerns/BelongsToTenant.phpapp/Jobs/Middleware/ResolveTenantForJob.phptests/Feature/Security/TenantIsolationTest.phptests/Feature/Security/TenantContextRequiredTest.php
Neu/ändern:
database/migrations/XXXX_enable_rls_for_tenant_tables.sqldatabase/migrations/XXXX_add_tenant_id_indexes.sql
Secrets
Neu:
config/secrets.phpapp/Services/Secrets/SecretStore.phpapp/Services/Secrets/VaultSecretStore.phpapp/Services/Secrets/DatabaseEncryptedSecretStore.phpapp/Services/Secrets/SecretReference.phptests/Feature/Security/SecretStorageTest.phpdocs/security/secrets-management.md
Ändern:
app/Models/RegistrarAccount.phpapp/Models/Domain.php
Erwartete Änderung:
- Keine Spalten wie
api_key,password,auth_code. - Stattdessen Spalten wie
secret_reference,auth_code_secret_reference.
Audit / Compliance
Neu:
app/Models/AuditLog.phpapp/Services/Audit/AuditLogger.phpapp/Services/Audit/AuditArchiveExporter.phpdatabase/migrations/XXXX_create_audit_logs_table.phpdatabase/migrations/XXXX_restrict_audit_log_mutations.sqltests/Feature/Audit/AuditLogAppendOnlyTest.phpdocs/compliance/audit-log.mddocs/compliance/gobd-verfahrensdokumentation-template.md
Domain-Management
Ändern:
app/Models/Domain.phpdatabase/migrations/XXXX_extend_domains_table.php
Ergänzen:
dnssec_statustransfer_lock_enabledwhois_privacy_enabledexpiry_dateexpiry_notification_statusauth_code_secret_referenceregistrar_statuslast_registry_sync_at
Neu:
app/Enums/Domain/DnssecStatus.phpapp/Enums/Domain/RegistrarStatus.phpapp/Enums/Domain/ExpiryNotificationStatus.php
State Machines / Statushistorie
Neu:
app/StateMachines/ContractStateMachine.phpapp/StateMachines/PaymentStateMachine.phpapp/StateMachines/CancellationStateMachine.phpapp/StateMachines/DomainTransferStateMachine.php
Neu:
database/migrations/XXXX_create_contract_status_history_table.phpdatabase/migrations/XXXX_create_payment_status_history_table.phpdatabase/migrations/XXXX_create_domain_transfer_status_history_table.php
Neu:
tests/Feature/StateMachines/ContractStateMachineTest.phptests/Feature/StateMachines/PaymentStateMachineTest.phptests/Feature/StateMachines/DomainTransferStateMachineTest.php
Adapter / Retry / DLQ
Neu:
config/adapters.phpapp/Support/Adapters/CircuitBreaker.phpapp/Support/Adapters/AdapterHealthCheck.phpapp/Support/Adapters/RetryPolicy.phpapp/Support/Adapters/DeadLetterHandler.phpapp/Console/Commands/CheckAdapterHealthCommand.phptests/Feature/Adapters/CircuitBreakerTest.phptests/Feature/Queue/DeadLetterHandlingTest.php
Ändern:
docs/adr/0017-adapter-resilience.md
Ergänzen:
- Max Retry Count
- Exponential Backoff Cap
- DLQ nach endgültigem Fehlschlag
- Alerting-Schwelle
- Poison-Message-Handling
Domänensprache / Modulgrenzen
Neu:
docs/domain/glossary.mddocs/domain/module-boundaries.md
Ändern:
docs/api/openapi.yaml- betroffene Models, DTOs, Requests und Resources
Festlegung:
- Einheitlich verwenden:
tenantfür Mandant/Systemgrenzecustomerfür Kundecontractfür Vertragproductfür Produktinvoicefür Rechnung
Produkt- und Vertragsversionierung
Neu:
app/Models/ProductVersion.phpapp/Models/ContractVersion.phpdatabase/migrations/XXXX_create_product_versions_table.phpdatabase/migrations/XXXX_create_contract_versions_table.phptests/Feature/Billing/ProductVersioningTest.phptests/Feature/Billing/InvoiceReproducibilityTest.php
Ändern:
app/Models/Product.phpapp/Models/Contract.phpapp/Models/Invoice.php
Superadmin / Break-Glass
Neu:
app/Policies/SuperadminPolicy.phpapp/Services/Security/BreakGlassAccessService.phpapp/Models/PrivilegedAccessGrant.phpdatabase/migrations/XXXX_create_privileged_access_grants_table.phptests/Feature/Security/BreakGlassAccessTest.phpdocs/security/break-glass.md
Ergänzen:
- zeitlich begrenzte Rechte
- Begründungspflicht
- Audit-Log für jede privilegierte Aktion
- optional 4-Augen-Freigabe für definierte Aktionen
5. Konkrete nächste Schritte
docs/adr/0020-tenant-isolation-rls.mderstellen und RLS als verbindliche Entscheidung festhalten.- Tenant-Kontext mit
TenantContext, Middleware und Model-Concern implementieren. - RLS-Migration für alle tenant-bezogenen Tabellen ergänzen.
- Cross-Tenant-Sicherheitstests schreiben und in CI verpflichtend machen.
docs/adr/0021-secrets-management.mderstellen.- Registrar- und Domain-Secrets aus Fachmodellen entfernen und durch Secret-Referenzen ersetzen.
- Adapter-ADR
0017um Circuit Breaker, Health Checks, Retry-Limits und DLQ-Regeln erweitern. - State Machines für Vertrag, Zahlung, Kündigung und Domain-Transfer definieren.
- Produkt- und Vertragsversionierung als Tabellen und Tests ergänzen.
docs/domain/glossary.mderstellen und Begriffe im Code vereinheitlichen.- Break-Glass-Zugriffe für Superadmin modellieren und auditieren.
- Audit-Log append-only absichern und Archivierungsdokumentation ergänzen.