Ziel
Im Filament-Adminpanel soll pro User steuerbar sein, ob er alles sehen darf oder nur ausgewählte Module (z. B. nur Betankungen).
Anforderungen
- Pro User konfigurierbar:
all (voller Modulzugriff)
selected (nur freigegebene Module)
- Beispiel: User mit
selected + refuelings darf nur Betankungen sehen/nutzen.
- Zugriff muss sicher sein (nicht nur Navigation verstecken, sondern echte Autorisierung für direkte URL-Aufrufe).
Umsetzung (klarer Plan)
- DB-Erweiterung
users
- Neue Felder hinzufügen:
panel_scope (enum/string, Werte: all, selected, Default: selected)
panel_modules (json, Default: [])
- Migration inkl. sauberem
down().
- User-Model erweitern
- Casts ergänzen:
panel_modules als Collection/Array
- Methoden ergänzen:
canUsePanelModule(string $module): bool
true, wenn isAdmin()
- oder
panel_scope === 'all'
- oder
panel_scope === 'selected' und Modul in panel_modules enthalten
canAccessPanel(Panel $panel) anpassen:
- Admin weiterhin erlaubt
- ansonsten Zugang nur, wenn
all oder mindestens ein Modul freigegeben ist.
- ACL über Policies umsetzen (nicht nur Navigation)
- Für jede Filament-Resource Policy erstellen/registrieren.
viewAny() pro Resource an canUsePanelModule('<module_key>') koppeln.
- Für Actions (
create, update, delete, etc.) konsistent entscheiden:
- entweder gleiches Modulrecht
- oder feiner, falls nötig.
- Mapping-Vorschlag:
refuelings
gas_stations
expenses
fi_settlements
training_fund_reports
aircraft
departments
- Filament UI zum Pflegen der Rechte
- In User-Verwaltung (bestehender Flow) Eingabefelder ergänzen:
panel_scope (Select: all / selected)
panel_modules (MultiSelect mit klaren Labels, gespeicherte Values = Modul-Keys)
- UX:
- Wenn
panel_scope = all, panel_modules optional deaktivieren/ausblenden.
- Sicherheits-/Konsistenzcheck
- Verifizieren, dass verbotene Resources weder in Navigation erscheinen noch per URL erreichbar sind (
403).
- Keine alleinige Nutzung von
shouldRegisterNavigation() als ACL.
Akzeptanzkriterien
Technische Hinweise
- Filament 5 autorisiert Resources über Laravel Policies (
viewAny etc.).
- Navigation-Hiding allein ist kein Zugriffsschutz.
- Bestehende
roles aus Vereinsflieger bleiben unberührt; neue Panel-ACL ist ergänzend.
Ziel
Im Filament-Adminpanel soll pro User steuerbar sein, ob er alles sehen darf oder nur ausgewählte Module (z. B. nur
Betankungen).Anforderungen
all(voller Modulzugriff)selected(nur freigegebene Module)selected+refuelingsdarf nurBetankungensehen/nutzen.Umsetzung (klarer Plan)
userspanel_scope(enum/string, Werte:all,selected, Default:selected)panel_modules(json, Default:[])down().panel_modulesals Collection/ArraycanUsePanelModule(string $module): booltrue, wennisAdmin()panel_scope === 'all'panel_scope === 'selected'und Modul inpanel_modulesenthaltencanAccessPanel(Panel $panel)anpassen:alloder mindestens ein Modul freigegeben ist.viewAny()pro Resource ancanUsePanelModule('<module_key>')koppeln.create,update,delete, etc.) konsistent entscheiden:refuelingsgas_stationsexpensesfi_settlementstraining_fund_reportsaircraftdepartmentspanel_scope(Select:all/selected)panel_modules(MultiSelect mit klaren Labels, gespeicherte Values = Modul-Keys)panel_scope = all,panel_modulesoptional deaktivieren/ausblenden.403).shouldRegisterNavigation()als ACL.Akzeptanzkriterien
alloderselectedgesetzt werden.selectedsind nur freigegebene Module sichtbar.403.refuelingssieht/nutzt nurBetankungen.Intranet Admin) hat weiterhin Vollzugriff.viewAny/Routen-Zugriff je Modul).Technische Hinweise
viewAnyetc.).rolesaus Vereinsflieger bleiben unberührt; neue Panel-ACL ist ergänzend.