Laravel Authorization: Rechtesystem
Wenn das Laravel Rechtesystem benutzt wird, lassen sich Rechte an verschiedenen Stellen auf einfache Weise überprüfen.
Regeln definieren
Genutzt hierfür wird der bereits vorhandene AuthServiceProvider
(app/providers/AuthServiceProvider.php). Dort lassen sich
in der boot
-Methode die Regeln für das Rechtesystem definieren:
public function boot(GateContract $gate) { $this->registerPolicies($gate); $gate->define('edit-event', function($user, $event){ return $user->id == $event->organiser_id; }); }
Im $gate
-Objekt können über die Methode define neue Regeln hinzugefügt werden. Neben dem Namen der Regel
kann über ein Closure eine Funktion mitgegeben werden. Sie liefert true, wenn das Recht gegeben ist und false,
wenn nicht.
Anstelle des Closures kann man hier auch einen Methodenaufruf im Format Class@method
übergeben.
Rechte prüfen
Beim Bearbeiten eines Events kann man nun prüfen, ob der jeweilige Benutzer das überhaupt darf. Das geht mit dem Hinzufügen des folgenden Codes zum Start der jeweiligen Update-Funktion:
if (Gate::denies('edit-event', $post)) { abort(403); }
Diese Überprüfungen sollte man lieber zu oft machen, als zu wenig. Das Gegenstück zu denies
heißt
allows
und liefert entsprechend, ob du Aktion erlaubt ist.
Überprüfung für einen anderen Nutzer
Ggfl. kann es Sinn machen, um zu sehen ob ein anderer Nutzer das jeweilige Recht hat. Hierbei kann man einfach das entsprechende User-Objekt übergeben:
if (Gate::forUser($user)->allows('edit-event', $event)) { //... }
Natürlich ist es auch möglich, mehrere Parameter der Prüfung zu übergeben. Dazu kann man einfach ein Array nutzen. Im AuthServiceController kommen diese dann als einzelner Parameter mit.
Überprüfung in Blade Templates
Das Rechte-System ist natürlich auch in den Views verfügbar. Hier kann man zum Beispiel einen Bearbeiten-Button nur einblenden, wenn das jeweilige Recht vergeben ist:
@can('edit-event', $event) <a href="{{$event->url}}/bearbeiten">Veranstaltung bearbeiten</a> @endcan
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Über uns
Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project