Maison >développement back-end >tutoriel php >Politique de porte de contrôle des autorisations Laravel

Politique de porte de contrôle des autorisations Laravel

不言
不言original
2018-06-05 09:46:042231parcourir

Cet article présente principalement la politique de contrôle des autorisations de Laravel, qui a une certaine valeur de référence. Maintenant, je la partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

À propos des autorisations

Essentiellement, il décrit le jugement de démarrage ou non de la production sur la base d'une unité logique exécutable.

Définition Il doit y avoir une instance d'utilisateur ou un paramètre d'identification unique, et la ressource d'utilisation qui lui est associée. Habituellement, une fermeture, une fonction ou une méthode

est utilisée pour appeler le descripteur d'unité logique d'autorisation, l'objet d'opération d'autorisation de paramètre, les informations utilisateur.

Origine

Le contrôle d'autorisation le plus basique, opérateur ternaire ? :. Jugement évidemment conditionnel, puis passez à la logique d'exécution correspondante.

L'idée de Laravel est de séparer la logique d'exécution (code de production) et l'autorisation (logique de jugement conditionnel). Concentrez-vous sur la génération des conditions, et de manière générale, renforcez la logique d'autorisation (ce qui est très utile pour les autorisations complexes). Postulat : tous les codes sont démarrés une fois l'enregistrement du service terminé. Le code suivant sera donc enregistré. Son but est de trouver le corps logique qui autorise véritablement le jugement.

Gate::define('update articles', 'ArticlePolicy@update')
Le premier paramètre est évidemment juste un identifiant d'autorisation (le paramètre handle utilisé pour appeler), et le deuxième paramètre est le corps d'exécution logique de l'autorisation.


Définition de l'autorisation Laravel

Définir l'autorisation dans la méthode

AuthServiceProviderboot

Gate::define('update articles', function ($user, $article) {
    return $user->id == $article->user_id;
});

Gate::define('update articles', 'ArticlePolicy@edit');
<?php

namespace App\Policies;

use App\User;
use App\Models\Article;

class ArticlePolicy
{
    public function update(User $user, Article $article)
    {
        return $user->id == $article->author_id;
    }
}
Laravel autorise l'utilisation des

    Façades de portail :
  1. et

    . Gate::allows('update articles', $article)Gate::denies('update articles', $article)

  2. Le contrôleur introduit le
  3. trait

    AuthorizesRequests

    .

    $this->authorize('update articles', $article)

  4. Modèle de lame : directives
  5. et

    . @can('update articles', $article)@cannot('update articles', $article)

  6. Instances de modèle utilisateur :
  7. et

    . $user->can('update articles', $article)$user->cannot('update articles', $article)

Politique de Laravel


Afin de définir et d'utiliser facilement l'autorisation, Laravel introduit une politique basée sur Gate. Chaque méthode de la stratégie sera enregistrée avec la description de la méthode gate::define. C'est pourquoi, après avoir utilisé l'enregistrement de la classe de stratégie, même si la logique d'autorisation n'est pas définie avec la façade Gate, la forme Gate::allow('strategy class method') peut toujours être utilisée dans le contrôleur pour effectuer des jugements d'autorisation.


Définissez d'abord la relation de mappage d'autorisation dans l'attribut de tableau

de

AuthServiceProviderpolicies

/**
 * The policy mappings for the application.
 *
 * @var array
 */
protected $policies = [
    Article::class => ArticlePolicy::class,
];
<?php

namespace App\Policies;

use App\User;
use App\Models\Article;
use Illuminate\Auth\Access\HandlesAuthorization;

class ArticlePolicy
{
    use HandlesAuthorization;

    public function create(User $user)
    {
        return true;
    }

    public function delete(User $user, Article $article)
    {
        return $user->id == $article->author_id;
    }

     public function before($user, $ability)
    {
        if($user->isSuperAdmin()){
            return true;
        }
    }
 }
Remarque

 : Policy ajoute simplement un trait

à une classe PHP normale.

HandlesAuthorization Dans Policy, il sera appelé avant que toutes les méthodes ne soient exécutées. Il est souvent utilisé pour gérer la logique d'autorisation de l'administrateur.


Recommandations associées :

Comment Laravel utilise gulp pour créer des ressources frontales

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