Suche…
Einführung
Laravel bietet eine einfache Möglichkeit, Benutzeraktionen für bestimmte Ressourcen zu autorisieren. Mit der Berechtigung können Sie Benutzern gezielt Zugriff auf bestimmte Ressourcen gewähren und anderen Benutzern den Zugriff verweigern. Laravel bietet eine einfache API zum Verwalten von Benutzerautorisierungen mithilfe von Gates
und Policies
. Gates
bieten einen einfachen AuthServiceProvider
Ansatz für die Autorisierung mit dem AuthServiceProvider
Policies
können Sie die Autorisierungslogik anhand von Klassen um Modelle herum organisieren.
Gates verwenden
Gates
sind Schließungen, die bestimmen, ob ein Benutzer eine bestimmte Aktion für eine Ressource ausführen darf. Gates
werden in der Regel in der Boot-Methode von AuthServiceProvider
und kurz benannt, um AuthServiceProvider
, was sie tun. Ein Beispiel für ein Gate, das nur Premium-Benutzern die Anzeige bestimmter Inhalte ermöglicht, sieht folgendermaßen aus:
Gate::define('view-content', function ($user, $content){
return $user->isSubscribedTo($content->id);
});
Ein Gate
erhält immer eine Benutzerinstanz als erstes Argument. Sie müssen es nicht übergeben, wenn Sie das Gate verwenden. Optional können Sie zusätzliche Argumente wie das betreffende eloquente Modell erhalten.
Aktionen mit Gates autorisieren
Um das Beispiel oben für eine Blade-Vorlage zu verwenden, um den Inhalt für den Benutzer auszublenden, führen Sie normalerweise Folgendes aus:
@can('view-content', $content)
<! -- content here -->
@endcan
Um die Navigation zum Inhalt vollständig zu verhindern, können Sie in Ihrem Controller Folgendes ausführen:
if(Gate::allows('view-content', $content)){
/* user can view the content */
}
OR
if(Gate::denies('view-content', $content)){
/* user cannot view content */
}
Hinweis: Sie müssen den aktuell authentifizierten Benutzer nicht an diese Methode übergeben. Laravel übernimmt dies für Sie.
Richtlinien
Richtlinien sind Klassen, mit deren Hilfe Sie die Autorisierungslogik um eine Modellressource herum organisieren können. In unserem vorherigen Beispiel verfügen wir möglicherweise über eine ContentPolicy
, die den Benutzerzugriff auf das Content
Modell verwaltet.
Um ContentPolicy
zu ContentPolicy
, bietet laravel einen handwerklichen Befehl. Einfach laufen
php artisan make:policy ContentPolicy
Dadurch wird eine leere Richtlinienklasse erstellt und im Ordner app/Policies
abgelegt. Wenn der Ordner nicht vorhanden ist, erstellt Laravel ihn und platziert die Klasse darin.
Nach der Erstellung müssen Richtlinien registriert werden, damit Laravel wissen kann, welche Richtlinien beim Autorisieren von Aktionen für Modelle verwendet werden sollen. Der AuthServiceProvider
Laravel, der mit allen neuen Laravel-Installationen AuthServiceProvider
wird, verfügt über eine Richtlinieneigenschaft, die Ihre eloquenten Modelle ihren Autorisierungsrichtlinien zuordnet. Alles, was Sie tun müssen, um die Zuordnung zum Array hinzuzufügen.
protected $policies = [
Content::class => ContentPolicy::class,
];
Richtlinien schreiben
Das Schreiben von Policies
folgt im Wesentlichen dem Schreiben von Gates
. Das Inhaltsgenehmigungsfenster kann als Richtlinie wie folgt umgeschrieben werden:
function view($user, $content)
{
return $user->isSubscribedTo($content->id);
}
Richtlinien können bei Bedarf mehr Methoden enthalten, um alle Autorisierungsfälle für ein Modell zu bearbeiten.
Aktionen mit Richtlinien autorisieren
Über das Benutzermodell
Das Laravel-Benutzermodell enthält zwei Methoden, die bei der Autorisierung mithilfe von Policies
hilfreich sind. can
und can't
Diese beiden können verwendet werden, um zu bestimmen, ob ein Benutzer jeweils eine Berechtigung für ein Modell hat oder nicht.
Um zu überprüfen, ob ein Benutzer einen Inhalt anzeigen kann oder nicht, können Sie Folgendes tun:
if($user->can('view', $content)){
/* user can view content */
}
OR
if($user->cant('view', $content)){
/* user cannot view content */
}
Über Middleware
Route::get('/contents/{id}, function(Content $content){
/* user can view content */
})->middleware('can:view,content');
Über Controller
Laravel liefert eine Hilfsmethode, genannt authorize
, die den Namen der Politik und der damit verbundenen Modell als Argumente übernimmt, und entweder autorisiert die Aktion auf der Grundlage Ihrer Berechtigungslogik oder verweigert die Aktion und wirft einen AuthorizationException
, die die Laravel Exception - Handler zu einem wandelt 403 HTTP response
.
pubic function show($id)
{
$content = Content::find($id);
$this->authorize('view', $content);
/* user can view content */
}