Heim > Artikel > Web-Frontend > Beispiel für die Vervollständigung der Benutzerautorisierung mithilfe einer Richtlinie in Laravel
Laravel bietet eine einfachere Möglichkeit, Benutzerautorisierungsaktionen durchzuführen. Ähnlich wie bei der Benutzerauthentifizierung verfügt Laravel über zwei Hauptmethoden zur Implementierung der Benutzerautorisierung: Gates und Richtlinien. Zeichnen Sie hier die Verwendung von Richtlinien auf. Die Verwendung von Richtlinien zum Vervollständigen der Benutzerautorisierung umfasst hauptsächlich drei Schritte:
Richtlinienklasse definieren
Richtlinienklasse und Modellzuordnung registrieren
Richtlinienbeurteilung
Richtlinienklasse definieren
Strategie ist eine Klasse, die die Autorisierungslogik in einem bestimmten Modell oder einer bestimmten Ressource organisiert. Wenn es sich bei der Anwendung beispielsweise um einen Blog handelt, gibt es ein Post-Modell und eine entsprechende PostPolicy, um Benutzeraktionen zu autorisieren, z. B. das Erstellen oder Aktualisieren eines Blogs oder das Löschen eines Blogs.
An dieser Stelle können Sie den Befehl artisan verwenden, um eine Richtlinienklasse zu erstellen. Der folgende Befehl erstellt eine leere Post-Richtlinienklasse
php artisan make:policy PostPolicy
Die generierte Richtlinie wird in der App/den Richtlinien platziert Verzeichnis. Wenn dieses Verzeichnis in Ihrer Anwendung nicht vorhanden ist, erstellt Laravel es automatisch.
Wenn Sie eine Strategieklasse mit CURD generieren möchten, können Sie sich mit dem folgenden Handwerkerbefehl
php artisan make:policy PostPolicy --model=Post
registrieren die dem Modell zugeordnete Strategieklasse
Registrieren Sie die Richtlinienklasse im AuthServiceProvider
protected $policies = [ //'App\Model' => 'App\Policies\ModelPolicy', 这个是laravel中默认注册了的policy,可以模仿这个注册我们自己的policy 'App\Post' => 'App\Policies\PostPolicy', //注册Post的policy ];
Das Zuordnen der Richtlinienklasse zum Modell bedeutet, dass wir unsere Richtlinienmethode in die Richtlinie schreiben
<?phpnamespace App\Policies;use App\User;use App\Post;use Illuminate\Auth\Access\HandlesAuthorization;class PostPolicy{ use HandlesAuthorization; /** * Determine whether the user can update the post. * * @param \App\User $user * @param \App\Post $post * @return mixed */ public function update(User $user, Post $post) { // return $user->id === $post->user_id; } /** * Determine whether the user can delete the post. * * @param \App\User $user * @param \App\Post $post * @return mixed */ public function delete(User $user, Post $post) { // return $user->id === $post->user_id; }
Update-Methode Akzeptiert Benutzer- und Beitragsinstanzen als Parameter und sollte „true“ oder „false“ zurückgeben, um anzugeben, ob der Benutzer berechtigt ist, den angegebenen Beitrag zu aktualisieren. Daher ermitteln wir in diesem Beispiel, ob die Benutzer-ID mit der Benutzer-ID im Beitrag übereinstimmt,
Richtlinienbeurteilung
Hier verwenden wir die Controller-Hilfsfunktion im Controller, um eine Richtlinienbeurteilung vorzunehmen
//文章编辑逻辑 public function update(Post $post) { $this->validate(request(),[ 'title' => 'required|String|min:5|max:50', 'content' => 'required|String|min:10', ]); $this->authorize('update',$post); ////////////////////策略判断 $post->title = request('title'); $post->content = request('content'); $post->save(); return redirect("/posts/{$post->id}"); } //文章删除 public function delete(Post $post) { //TODO::权限验证 $this->authorize('delete',$post); //////////////////策略判断 $post->delete(); return redirect('/posts'); }
Solange die Überprüfung fehlschlägt, löst Laravel automatisch eine HttpException aus. Diese Aktion ist nicht autorisiert.
Während der Entwicklung müssen wir möglicherweise basierend auf den Berechtigungen des Benutzers bestimmen, ob einige Schaltflächen angezeigt werden sollen, z Wie in der Ansichtsschaltfläche „Bearbeiten“ oder „Ändern“ können wir in Blade mit @can angeben, ob die Schaltfläche „Modell“ angezeigt wird.
Laravel bietet eine einfachere Möglichkeit, die Benutzerautorisierung zu handhaben Aktionen. Ähnlich wie bei der Benutzerauthentifizierung verfügt Laravel über zwei Hauptmethoden zur Implementierung der Benutzerautorisierung: Gates und Richtlinien.
Erfassen Sie hier die Verwendung von Richtlinien. Die Verwendung von Richtlinien zur Vervollständigung der Benutzerautorisierung umfasst hauptsächlich drei Schritte:
Richtlinienklasse definieren
Richtlinienklasse und Modellzuordnung registrieren
Richtlinienbeurteilung
Richtlinienklassen definieren
Eine Richtlinie ist eine Klasse, die die Autorisierungslogik in einem bestimmten Modell oder einer bestimmten Ressource organisiert. Wenn es sich bei der Anwendung beispielsweise um einen Blog handelt, gibt es ein Post-Modell und eine entsprechende PostPolicy, um Benutzeraktionen wie das Erstellen oder Aktualisieren eines Blogs oder das Löschen eines Blogs zu autorisieren.
An dieser Stelle können Sie den Befehl artisan verwenden, um eine Richtlinienklasse zu erstellen. Der folgende Befehl erstellt eine leere Post-Richtlinienklasse
php artisan make:policy PostPolicy
Die generierte Richtlinie wird in der App/den Richtlinien platziert Verzeichnis. Wenn dieses Verzeichnis in Ihrer Anwendung nicht vorhanden ist, erstellt Laravel es automatisch
Wenn Sie eine Strategieklasse mit CURD generieren möchten, können Sie sich mit dem folgenden Handwerkerbefehl
php artisan make:policy PostPolicy --model=Post
registrieren die dem Modell zugeordnete Strategieklasse
Registrieren Sie die Richtlinienklasse im AuthServiceProvider
protected $policies = [ //'App\Model' => 'App\Policies\ModelPolicy', 这个是laravel中默认注册了的policy,可以模仿这个注册我们自己的policy 'App\Post' => 'App\Policies\PostPolicy', //注册Post的policy ];
Das Zuordnen der Richtlinienklasse zum Modell bedeutet, dass wir unsere Richtlinienmethode in die Richtlinie schreiben
<?phpnamespace App\Policies;use App\User;use App\Post;use Illuminate\Auth\Access\HandlesAuthorization;class PostPolicy{ use HandlesAuthorization; /** * Determine whether the user can update the post. * * @param \App\User $user * @param \App\Post $post * @return mixed */ public function update(User $user, Post $post) { // return $user->id === $post->user_id; } /** * Determine whether the user can delete the post. * * @param \App\User $user * @param \App\Post $post * @return mixed */ public function delete(User $user, Post $post) { // return $user->id === $post->user_id; }
Update-Methode Akzeptiert Benutzer- und Beitragsinstanzen als Parameter und sollte „true“ oder „false“ zurückgeben, um anzugeben, ob der Benutzer berechtigt ist, den angegebenen Beitrag zu aktualisieren. Daher ermitteln wir in diesem Beispiel, ob die Benutzer-ID mit der Benutzer-ID im Beitrag übereinstimmt,
Richtlinienbeurteilung
Hier verwenden wir die Controller-Hilfsfunktion im Controller, um eine Richtlinienbeurteilung vorzunehmen
//文章编辑逻辑 public function update(Post $post) { $this->validate(request(),[ 'title' => 'required|String|min:5|max:50', 'content' => 'required|String|min:10', ]); $this->authorize('update',$post); ////////////////////策略判断 $post->title = request('title'); $post->content = request('content'); $post->save(); return redirect("/posts/{$post->id}"); } //文章删除 public function delete(Post $post) { //TODO::权限验证 $this->authorize('delete',$post); //////////////////策略判断 $post->delete(); return redirect('/posts'); }
Solange die Überprüfung fehlschlägt, löst Laravel automatisch eine HttpException aus. Diese Aktion ist nicht autorisiert.
Während der Entwicklung müssen wir möglicherweise basierend auf den Berechtigungen des Benutzers bestimmen, ob einige Schaltflächen angezeigt werden sollen, z Wie in der Ansichtsschaltfläche „Bearbeiten“ oder „Ändern“ können wir in Blade mit @can angeben, ob die Modellschaltfläche angezeigt wird.
Das obige ist der detaillierte Inhalt vonBeispiel für die Vervollständigung der Benutzerautorisierung mithilfe einer Richtlinie in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!