Maison >développement back-end >tutoriel php >Politique de porte de contrôle des autorisations Laravel
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
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 AuthServiceProvider
boot
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
. Gate::allows('update articles', $article)
Gate::denies('update articles', $article)
AuthorizesRequests
.$this->authorize('update articles', $article)
. @can('update articles', $article)
@cannot('update articles', $article)
. $user->can('update articles', $article)
$user->cannot('update articles', $article)
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
AuthServiceProvider
policies
/** * 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 :
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!