Maison  >  Article  >  interface Web  >  Exemple de comment compléter l'autorisation utilisateur à l'aide de la stratégie dans Laravel

Exemple de comment compléter l'autorisation utilisateur à l'aide de la stratégie dans Laravel

小云云
小云云original
2018-03-13 14:47:462331parcourir

Laravel fournit un moyen plus simple de gérer les actions d'autorisation des utilisateurs. Semblable à l'authentification des utilisateurs, Laravel dispose de 2 méthodes principales pour implémenter l'autorisation des utilisateurs : les portes et les politiques. Enregistrez ici l'utilisation de la stratégie. L'utilisation de la stratégie pour finaliser l'autorisation de l'utilisateur comprend principalement trois étapes :

Définir la classe de stratégie
Enregistrer la classe de stratégie et l'association de modèle
Jugement de stratégie

Définir la classe de stratégie.

La stratégie est une classe qui organise la logique d'autorisation dans un modèle ou une ressource spécifique. Par exemple, si l'application est un blog, il y aura un modèle Post et une PostPolicy correspondante pour autoriser les actions de l'utilisateur, telles que la création ou la mise à jour d'un blog ou la suppression d'un blog.

À ce stade, vous pouvez utiliser la commande artisan pour créer une classe de stratégie. La commande suivante crée une classe de stratégie de publication vide

php artisan make:policy PostPolicy

La stratégie générée sera placée dans l'application/Policies. annuaire. Si ce répertoire n'existe pas dans votre application, Laravel le créera automatiquement

Si vous souhaitez générer une classe de stratégie contenant CURD, vous pouvez utiliser la commande artisanale suivante

php artisan make:policy PostPolicy --model=Post

pour vous inscrire la classe de stratégie associée au modèle

Enregistrer la classe de politique dans l'AuthServiceProvider

    protected $policies = [        //'App\Model' => 'App\Policies\ModelPolicy',  这个是laravel中默认注册了的policy,可以模仿这个注册我们自己的policy        'App\Post' => 'App\Policies\PostPolicy', //注册Post的policy
    ];

Associer la classe de politique au modèle signifie écrire notre méthode de politique dans la politique

<?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;
    }

méthode de mise à jour Accepte les instances User et Post comme paramètres et doit renvoyer true ou false pour indiquer si l'utilisateur est autorisé à mettre à jour la publication donnée. Par conséquent, dans cet exemple, nous déterminons si l'identifiant de l'utilisateur correspond à l'identifiant de l'utilisateur dans la publication,

Jugement politique

Ici, nous utilisons la fonction auxiliaire du contrôleur dans le contrôleur pour porter un jugement politique

//文章编辑逻辑
    public function update(Post $post)
    {
        $this->validate(request(),[            &#39;title&#39;      => &#39;required|String|min:5|max:50&#39;,            &#39;content&#39;    => &#39;required|String|min:10&#39;,
        ]);
        $this->authorize(&#39;update&#39;,$post);         ////////////////////策略判断
        $post->title = request(&#39;title&#39;);
        $post->content = request(&#39;content&#39;);
        $post->save();        return redirect("/posts/{$post->id}");
    }    //文章删除
    public function delete(Post $post)
    {        //TODO::权限验证
        $this->authorize(&#39;delete&#39;,$post);           //////////////////策略判断
        $post->delete();        return redirect(&#39;/posts&#39;);
    }

Tant que la vérification échoue, laravel lancera automatiquement une HttpException. Cette action n'est pas autorisée.

Pendant le développement, nous devrons peut-être déterminer s'il faut afficher certains boutons en fonction des autorisations de l'utilisateur, tels que comme dans le bouton Modifier ou Modifier de la vue, dans le blade, nous pouvons utiliser @can pour spécifier si le bouton du modèle affiche

Laravel fournit un moyen plus simple de gérer l'autorisation des utilisateurs actes. Semblable à l'authentification des utilisateurs, Laravel dispose de 2 méthodes principales pour implémenter l'autorisation des utilisateurs : les portes et les politiques.

Enregistrez ici l'utilisation de la stratégie. L'utilisation de la stratégie pour compléter l'autorisation de l'utilisateur comprend principalement trois étapes :

Définir la classe de stratégie
Enregistrer la classe de stratégie et l'association de modèle
Jugement de stratégie

Définir des classes de stratégie

Une stratégie est une classe qui organise la logique d'autorisation dans un modèle ou une ressource spécifique. Par exemple, si l'application est un blog, il y aura un modèle Post et une PostPolicy correspondante pour autoriser les actions de l'utilisateur, telles que la création ou la mise à jour d'un blog ou la suppression d'un blog.

À ce stade, vous pouvez utiliser la commande artisan pour créer une classe de stratégie. La commande suivante crée une classe de stratégie de publication vide

php artisan make:policy PostPolicy

La stratégie générée sera placée dans l'application/Policies. annuaire. Si ce répertoire n'existe pas dans votre application, Laravel le créera automatiquement

Si vous souhaitez générer une classe de stratégie contenant CURD, vous pouvez utiliser la commande artisanale suivante

php artisan make:policy PostPolicy --model=Post

pour vous inscrire la classe de stratégie associée au modèle

Enregistrer la classe de politique dans l'AuthServiceProvider

    protected $policies = [        //&#39;App\Model&#39; => &#39;App\Policies\ModelPolicy&#39;,  这个是laravel中默认注册了的policy,可以模仿这个注册我们自己的policy        &#39;App\Post&#39; => &#39;App\Policies\PostPolicy&#39;, //注册Post的policy
    ];

Associer la classe de politique au modèle signifie écrire notre méthode de politique dans la politique

<?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;
    }

méthode de mise à jour Accepte les instances User et Post comme paramètres et doit renvoyer true ou false pour indiquer si l'utilisateur est autorisé à mettre à jour la publication donnée. Par conséquent, dans cet exemple, nous déterminons si l'identifiant de l'utilisateur correspond à l'identifiant de l'utilisateur dans la publication,

Jugement politique

Ici, nous utilisons la fonction auxiliaire du contrôleur dans le contrôleur pour porter un jugement politique

//文章编辑逻辑
    public function update(Post $post)
    {
        $this->validate(request(),[            &#39;title&#39;      => &#39;required|String|min:5|max:50&#39;,            &#39;content&#39;    => &#39;required|String|min:10&#39;,
        ]);
        $this->authorize(&#39;update&#39;,$post);         ////////////////////策略判断
        $post->title = request(&#39;title&#39;);
        $post->content = request(&#39;content&#39;);
        $post->save();        return redirect("/posts/{$post->id}");
    }    //文章删除
    public function delete(Post $post)
    {        //TODO::权限验证
        $this->authorize(&#39;delete&#39;,$post);           //////////////////策略判断
        $post->delete();        return redirect(&#39;/posts&#39;);
    }

Tant que la vérification échoue, laravel lancera automatiquement une HttpException. Cette action n'est pas autorisée.

Pendant le développement, nous devrons peut-être déterminer s'il faut afficher certains boutons en fonction des autorisations de l'utilisateur, tels que comme dans la vue Editer ou modifier le bouton, dans blade on peut utiliser @can pour préciser si le bouton modèle est affiché.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn