Skip to main content

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.
Entscheidungshilfe

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 mit Gate::define() in der Methode boot von App\Providers\AppServiceProvider definiert.
Die Closure eines Gates erhält als ersten Parameter stets den aktuell authentifizierten Benutzer. Weitere Parameter können zusätzliche Informationen wie das zu prüfende Model enthalten.

Berechtigungen mit einem Gate prüfen

Um im Controller mithilfe eines Gates zu prüfen, verwenden Sie Gate::allows() oder Gate::denies().

Ausnahmen mit Gate::authorize() auslösen

Um bei fehlender Berechtigung automatisch eine 403-Antwort zu senden, verwenden Sie Gate::authorize(). Damit sparen Sie sich den manuellen Aufruf von abort(403).
Gate::authorize() wirft bei fehlender Berechtigung eine Illuminate\Auth\Access\AuthorizationException. Laravel wandelt diese automatisch in eine HTTP-403-Antwort um.

Administrator-Bypass (Methode before)

Wenn Administratoren alle Berechtigungen erhalten sollen, verwenden Sie Gate::before().
Wenn die Closure in 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 eines Post-Models eignen sich Policies besser als Gates.

Autorisierungsablauf mit einer Policy

Eine Policy erzeugen

Erzeugen Sie eine Policy-Klasse mit dem Artisan-Befehl make:policy.
Mit der Option --model erstellen Sie eine Vorlage, die bereits alle CRUD-Methoden für das zugehörige Model enthält.
Dies erzeugt die Datei 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 diese Konvention einhalten, entfällt das explizite Registrieren der Policy.
Wenn Sie die Konvention nicht einhalten oder die Policy manuell registrieren möchten, verwenden Sie Gate::policy() in der boot-Methode des AppServiceProvider.
In Laravel 13 können Sie die Zuordnung auch deklarativ über das Attribut #[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 einer before-Methode Administratoren pauschal alle Berechtigungen erteilen.
Die before-Methode wird nur aufgerufen, wenn in der Policy-Klasse eine passende Methode existiert. Fehlt zum Beispiel die Methode update, wird auch before nicht aufgerufen.

Ausführungsreihenfolge des before-Callbacks

Policies im Controller nutzen

authorize()-Methode

Der Basis-Controller von Laravel stellt die Hilfsmethode authorize() bereit (wenn Sie nicht vom Basis-Controller erben, verwenden Sie Gate::authorize()).

RESTful-Policies gesammelt mit authorizeResource() registrieren

Rufen Sie im Konstruktor authorizeResource() auf, um für jede Aktion eines Controllers automatisch die passende Policy-Methode zu verknüpfen.
Zuordnung zwischen Controller-Aktionen und Policy-Methoden:
Mit authorizeResource() müssen Sie nicht in jeder Aktion einzeln authorize() aufrufen. In Kombination mit einem RESTful-Resource-Controller ist das besonders praktisch.

Autorisierung per Middleware

Um Autorisierungsprüfungen auf Routen-Ebene durchzuführen, verwenden Sie die Middleware can.
Eine kürzere Schreibweise mit der Methode 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

  • 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, Order oder Comment eine Policy-Klasse an.
Zuletzt geändert am 13. Juli 2026