Cluster: Repository-Bypass — größtes Architektur-Problem
20+ Stellen im Code umgehen das Repository-Pattern und greifen direkt via ref.read(supabaseClientProvider) auf Supabase zu.
Stellen (alle HOCH)
| Datei |
Beschreibung |
attendance_detail_page.dart (B2-020) |
11 direkte Calls — notes, deadline, share_plan, checklist, songs, conductors, img |
person_detail_page.dart (B3-019/020) |
_saveChanges, _updateUserRole, _unlinkAccount |
members_providers.dart (B3-028) |
instruments + player Tabellen direkt |
copy_to_tenant_sheet.dart (B4-011) |
targetGroups + songs insert |
parents_providers.dart (B5-024/033/034) |
parentChildrenProvider, childrenAttendancesProvider, force-unwrap auf tenant.id! |
upcoming_songs_provider.dart (B5-014) |
Multiple direkte Queries |
self_service_providers.dart (B5-013) |
currentSelfServicePlayerProvider |
planning_page.dart (B6-006/007) |
_savePlan, _toggleSharePlan + force-unwrap |
history_page.dart (B6-020) |
_addEntries, _deleteEntry |
general_settings_page.dart (B7-021) |
_saveSettings |
profile_page.dart (B7-P002) |
_loadProfile, _saveProfile |
user_management_page.dart (B7-U003) |
tenantUsersProvider, _addUser, _changeRole |
copy_shift_to_tenant_sheet.dart (B8-018) |
Cross-Tenant Insert ohne Repository |
handover_sheet.dart (B10-013) |
_loadTargetGroups, _getUserRoleInTenant |
voice_leader_providers.dart (B10-019/020) |
Queries ohne tenantId-Filter (Defense-in-Depth fehlt) |
Lösung
- Alle 20 Stellen migrieren auf entsprechende
XxxRepositoryWithTenantProvider
- Lint-Regel ergänzen:
ref.read(supabaseClientProvider) außerhalb von lib/data/repositories/ als Error
- Force-Unwrap auf
tenant.id! durch hasTenantId-Pattern ersetzen
Sprint
Sprint 2 (Repository-Bypass-Refactoring) — 4 Tage, ~30h Gesamt-Effort.
Hinweis
Dies ist als "HOCH" eingestuft, aber wegen der Verbreitung und der Sicherheits-Implikationen (Tenant-Isolation hängt davon ab, dass Server + UI konsistent filtern) ist es eines der wichtigsten Architektur-Themen. Daher hier als Tracking-Issue mit priority: critical markiert für Sichtbarkeit.
Cluster: Repository-Bypass — größtes Architektur-Problem
20+ Stellen im Code umgehen das Repository-Pattern und greifen direkt via
ref.read(supabaseClientProvider)auf Supabase zu.Stellen (alle HOCH)
attendance_detail_page.dart(B2-020)person_detail_page.dart(B3-019/020)_saveChanges,_updateUserRole,_unlinkAccountmembers_providers.dart(B3-028)instruments+playerTabellen direktcopy_to_tenant_sheet.dart(B4-011)targetGroups+songsinsertparents_providers.dart(B5-024/033/034)parentChildrenProvider,childrenAttendancesProvider, force-unwrap auftenant.id!upcoming_songs_provider.dart(B5-014)self_service_providers.dart(B5-013)currentSelfServicePlayerProviderplanning_page.dart(B6-006/007)_savePlan,_toggleSharePlan+ force-unwraphistory_page.dart(B6-020)_addEntries,_deleteEntrygeneral_settings_page.dart(B7-021)_saveSettingsprofile_page.dart(B7-P002)_loadProfile,_saveProfileuser_management_page.dart(B7-U003)tenantUsersProvider,_addUser,_changeRolecopy_shift_to_tenant_sheet.dart(B8-018)handover_sheet.dart(B10-013)_loadTargetGroups,_getUserRoleInTenantvoice_leader_providers.dart(B10-019/020)Lösung
XxxRepositoryWithTenantProviderref.read(supabaseClientProvider)außerhalb vonlib/data/repositories/als Errortenant.id!durchhasTenantId-Pattern ersetzenSprint
Sprint 2 (Repository-Bypass-Refactoring) — 4 Tage, ~30h Gesamt-Effort.
Hinweis
Dies ist als "HOCH" eingestuft, aber wegen der Verbreitung und der Sicherheits-Implikationen (Tenant-Isolation hängt davon ab, dass Server + UI konsistent filtern) ist es eines der wichtigsten Architektur-Themen. Daher hier als Tracking-Issue mit
priority: criticalmarkiert für Sichtbarkeit.