info@a-coding-project.de

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

Laravel Entwickler gesucht?

Wir haben bereits viel Erfahrung im Umgang mit Laravel und Vue.js.
Nehmen Sie gerne unverbindlich Kontakt zu uns auf.

zum Angebot

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Auch interessant