Dans une application Web moderne, contrôler qui peut accéder ou modifier les ressources est crucial. Par exemple, dans une application de blog, vous souhaiterez peut-être vous assurer que seul le propriétaire d'une publication peut la modifier ou la supprimer. Laravel propose deux manières élégantes de gérer les autorisations : Gates et Policy Classes. Ce guide vous guidera à travers les deux méthodes, vous montrant comment protéger vos ressources et assurer la sécurité de votre application.
Les portes offrent un moyen rapide et simple de gérer les autorisations à l'aide de fermetures. Ils sont parfaits pour des contrôles d'autorisation simples et sont définis dans AuthServiceProvider.
Définissons une porte pour garantir que seul le propriétaire de la publication peut mettre à jour ou supprimer une publication :
Définissez la porte : ouvrez AuthServiceProvider et ajoutez vos définitions de porte :
// app/Providers/AuthServiceProvider.php use Illuminate\Support\Facades\Gate; use App\Models\Post; public function boot() { $this->registerPolicies(); Gate::define('update-post', function ($user, Post $post) { return $user->id === $post->user_id; }); Gate::define('delete-post', function ($user, Post $post) { return $user->id === $post->user_id; }); }
Application de la porte : utilisez la porte dans les méthodes de votre contrôleur pour appliquer la logique d'autorisation :
// app/Http/Controllers/PostController.php use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; use App\Models\Post; public function update(Request $request, Post $post) { if (Gate::denies('update-post', $post)) { abort(403, 'You do not own this post. ?'); } // Proceed with updating the post } public function destroy(Post $post) { if (Gate::denies('delete-post', $post)) { abort(403, 'You do not own this post. ?'); } // Proceed with deleting the post }
Avantages :
Inconvénients :
Meilleur cas d'utilisation : petites applications ou cas d'utilisation simples où une vérification rapide des autorisations est nécessaire. ?
Les cours de stratégie offrent une approche plus structurée et évolutive de la gestion des autorisations. Ils offrent un moyen clair de gérer des règles d'autorisation complexes et de garder votre code organisé. Les politiques sont particulièrement utiles lorsque vous travaillez avec des contrôleurs de ressources qui incluent les opérations CRUD standard : index, create, edit, update et détruire.
Générer la stratégie : créez une classe de stratégie à l'aide d'Artisan :
php artisan make:policy PostPolicy
Définir les méthodes de stratégie : ouvrez la classe de stratégie générée et ajoutez des méthodes pour gérer l'autorisation pour chaque action :
// app/Policies/PostPolicy.php namespace App\Policies; use App\Models\User; use App\Models\Post; class PostPolicy { /** * Determine if the user can view the list of posts. * * @param User $user * @return bool */ public function viewAny(User $user) { // Example logic to allow viewing posts for authenticated users return true; } /** * Determine if the user can create a post. * * @param User $user * @return bool */ public function create(User $user) { return true; } /** * Determine if the user can update the post. * * @param User $user * @param Post $post * @return bool */ public function update(User $user, Post $post) { return $user->id === $post->user_id; } /** * Determine if the user can delete the post. * * @param User $user * @param Post $post * @return bool */ public function delete(User $user, Post $post) { return $user->id === $post->user_id; } }
Utilisation de la stratégie : Appliquez les méthodes de stratégie dans les actions de votre contrôleur :
// app/Http/Controllers/PostController.php use Illuminate\Http\Request; use App\Models\Post; public function update(Request $request, Post $post) { $this->authorize('update', $post); // Proceed with updating the post } public function destroy(Post $post) { $this->authorize('delete', $post); // Proceed with deleting the post }
Avantages :
Inconvénients :
Meilleur scénario : idéal pour les applications avec des exigences d'autorisation complexes ou lorsque l'on vise un code propre et maintenable. ?
Les portes et les classes de stratégie dans Laravel offrent des moyens puissants de gérer les autorisations. Les portes sont excellentes pour des vérifications simples et rapides, tandis que les classes de stratégie fournissent une approche structurée pour gérer des scénarios complexes, en particulier dans les contrôleurs de ressources avec des méthodes telles que index, create, edit, mettre à jour et détruire. Choisissez la méthode qui correspond le mieux aux besoins de votre application et profitez d’une base de code sécurisée et bien organisée ! ??
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!