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')
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; } }
. 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; } } }
: 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!