Ich habe eine mandantenfähige Laravel-App, die eine gemeinsam genutzte Datenbank mit Tenant-Scoping verwendet. Jede Organisation kann Basisberechtigungen für ihre Mitglieder definieren.
Beispiel: Wenn „resource.view“ aktiviert ist, können alle Mitglieder standardmäßig alle Ressourcen anzeigen; Wenn es deaktiviert ist, können nur Benutzer, die explizit einer Ressource zugewiesen sind, sie anzeigen.
Im Moment filtere ich Projekte wie folgt:
Code: Select all
$projects = Projects::query() // scoped
->all()
->filter(fn (Project $project) => $user->can('view', $project));
Das
Problem besteht darin, dass ein einzelner Fehler (wie das einfache Vergessen, einen Filter anzuwenden) dazu führen kann, dass Daten zwischen Mitgliedern verloren gehen. Ich habe versucht, einen globalen Bereich ähnlich meinem Mandantenbereich zu erstellen, aber es wird schnell kompliziert. Ich kann auch nicht einfach Gate::authorize('viewAny', Project::class);
Was ist die empfohlene Methode/das empfohlene Muster, damit umzugehen?