Unterschied zwischen Authentifizierung und Autorisierung
Authentifizierung stellt fest, „wer” ein Benutzer ist. Der Login-Vorgang ist das klassische Beispiel. Autorisierung entscheidet, „was” dieser Benutzer tun darf. Etwa: dass Benutzer nur ihre eigenen Beiträge bearbeiten dürfen oder dass Einstellungen nur von Administratoren geändert werden können. Nachdem Sie mit der Authentifizierung die Anmeldung implementiert haben, folgt als nächster Schritt die Autorisierung.Für die Autorisierung bietet Laravel zwei Ansätze: Gates und Policies. Welchen Sie einsetzen, hängt vom Anwendungsfall ab.
Gates
Ein Gate ist eine schlanke, auf Closures basierende Autorisierungsprüfung. Es eignet sich für Berechtigungsentscheidungen, die nicht an ein bestimmtes Model gebunden sind.Autorisierungsablauf mit einem Gate
Ein Gate definieren
Gates werden mitGate::define() in der Methode boot von App\Providers\AppServiceProvider definiert.
Berechtigungen mit einem Gate prüfen
Um im Controller mithilfe eines Gates zu prüfen, verwenden SieGate::allows() oder Gate::denies().
Ausnahmen mit Gate::authorize() auslösen
Um bei fehlender Berechtigung automatisch eine 403-Antwort zu senden, verwenden SieGate::authorize(). Damit sparen Sie sich den manuellen Aufruf von abort(403).
Administrator-Bypass (Methode before)
Wenn Administratoren alle Berechtigungen erhalten sollen, verwenden SieGate::before().
before einen Wert ungleich null zurückgibt, ist dieses Ergebnis die endgültige Entscheidung. Bei null (oder keiner Rückgabe) läuft die reguläre Gate-Prüfung weiter.
@can / @cannot in Blade-Templates
In Templates sind die Direktiven@can und @cannot für Gate-Prüfungen praktisch.
Policies
Eine Policy bündelt die Autorisierungslogik zu einem bestimmten Model in einer eigenen Klasse. Für Berechtigungen zum Anlegen, Anzeigen, Bearbeiten und Löschen einesPost-Models eignen sich Policies besser als Gates.
Autorisierungsablauf mit einer Policy
Eine Policy erzeugen
Erzeugen Sie eine Policy-Klasse mit dem Artisan-Befehlmake:policy.
--model erstellen Sie eine Vorlage, die bereits alle CRUD-Methoden für das zugehörige Model enthält.
app/Policies/PostPolicy.php.
Automatische Erkennung von Model und Policy
Laravel erkennt Policies standardmäßig anhand einer Namenskonvention automatisch.- Model:
app/Models/Post.php - Policy:
app/Policies/PostPolicy.php
Wenn Sie die Konvention nicht einhalten oder die Policy manuell registrieren möchten, verwenden Sie In Laravel 13 können Sie die Zuordnung auch deklarativ über das Attribut
Gate::policy() in der boot-Methode des AppServiceProvider.#[UsePolicy] am Model festlegen.Policy-Methoden implementieren
Eine mit--model erzeugte Policy enthält Methoden, die den üblichen CRUD-Aktionen entsprechen.
Administrator-Bypass (Methode before)
Auch in einer Policy können Sie mit einerbefore-Methode Administratoren pauschal alle Berechtigungen erteilen.
Ausführungsreihenfolge des before-Callbacks
Policies im Controller nutzen
authorize()-Methode
Der Basis-Controller von Laravel stellt die Hilfsmethodeauthorize() bereit (wenn Sie nicht vom Basis-Controller erben, verwenden Sie Gate::authorize()).
- User::can() / cannot()
RESTful-Policies gesammelt mit authorizeResource() registrieren
Rufen Sie im KonstruktorauthorizeResource() auf, um für jede Aktion eines Controllers automatisch die passende Policy-Methode zu verknüpfen.
Autorisierung per Middleware
Um Autorisierungsprüfungen auf Routen-Ebene durchzuführen, verwenden Sie die Middlewarecan.
can:
Policies in Blade-Templates verwenden
Sobald eine Policy registriert ist, werden die Blade-Direktiven@can und @cannot automatisch über die Policy ausgewertet.
Praxisbeispiel: Berechtigungen für Blogbeiträge
Beispiel für eine Blog-Anwendung, in der „nur der Autor eines Beitrags ihn bearbeiten und löschen darf”.1
Policy erzeugen
2
Policy-Methoden implementieren
3
authorizeResource() im Controller hinzufügen
4
Berechtigungsprüfungen im Blade-Template ergänzen
Zusammenfassung
Wann Gate, wann Policy?
Wann Gate, wann Policy?
- Gate: einfache Berechtigungsentscheidungen ohne Model-Bezug, zum Beispiel für den Zugriff auf ein Admin-Dashboard oder für globale Konfigurationsrechte.
- Policy: Berechtigungen für CRUD-Operationen an einem Model. Legen Sie pro Ressource wie
Post,OrderoderCommenteine Policy-Klasse an.
Häufig genutzte API
Häufig genutzte API
Häufig genutzte Artisan-Befehle
Häufig genutzte Artisan-Befehle