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 */
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow