Maison >développement back-end >tutoriel php >Autorisation : Comprendre les politiques dans Laravel
Contrôler ce que les utilisateurs peuvent ou ne peuvent pas faire dans votre application est l'une des choses les plus essentielles que vous devrez faire lors de la création d'applications du monde réel.
Par exemple, dans une application de tâches, vous ne voulez pas qu'un utilisateur puisse modifier ou supprimer les tâches d'autres utilisateurs.
Dans cet article, vous découvrirez l'une des façons transparentes de le faire dans Laravel en utilisant des politiques pour contrôler ce que les utilisateurs peuvent faire en créant une simple application de tâches.
Pour suivre ce tutoriel, vous devez avoir une compréhension de base de Laravel et de sa structure d'application.
Exécutez la commande suivante pour créer une nouvelle application Laravel dans le dossier souhaité et déplacez-vous dedans :
composer create-project laravel/laravel todo-app && cd todo-app
Ensuite, exécutez la commande suivante pour installer Laravel Breeze :
php artisan breeze:install
Breeze étayera votre nouvelle application avec une authentification afin que vos utilisateurs puissent s'inscrire, se connecter, se déconnecter et afficher leurs tableaux de bord personnalisés.
Après cela, compilez les ressources de votre application en exécutant les commandes suivantes :
npm install && npm run dev
Laravel est livré par défaut avec la base de données SQLite basée sur des fichiers, la prochaine chose que vous devez faire est de connecter le fichier de base de données de votre application à un visualiseur de base de données comme TablePlus ou tout autre que vous aimez.
Après avoir connecté votre base de données à la visionneuse, exécutez les commandes suivantes pour migrer les tables disponibles dans votre base de données :
php artisan migrate
Une fois cela fait, exécutez la commande suivante pour afficher votre application dans le navigateur :
php artisan serve
Vous devriez maintenant voir votre nouvelle application Laravel sur localhost:8000 ressemblant à ceci :
Vous pouvez maintenant vous rendre sur la page d'inscription pour créer un utilisateur et accéder au tableau de bord, qui représente à ce stade l'intégralité de l'application.
Les modèles dans Laravel sont utilisés pour contrôler les tables de base de données. Utilisez la commande suivante pour créer un modèle Todo dans le dossier App/Models :
php artisan make:model Todo
Ensuite, dans le fichier nouvellement créé, remplacez la classe Todo par le code suivant :
class Todo extends Model { use HasFactory; protected $fillable = [ 'title', 'description', 'completed', 'user_id' ]; public function user() { return $this->belongsTo(User::class); } }
Le code ci-dessus permettra aux utilisateurs de soumettre un formulaire avec les propriétés $fillable ; il définit également la relation entre un utilisateur et un Todo ; dans ce cas, une tâche appartient à un utilisateur. Terminons la configuration de la relation en ajoutant le code suivant au fichier App/Models/User.php :
public function todos() { return $this->hasMany(Todo::class); }
Le code ci-dessus connectera le modèle User au modèle Todo afin qu'il puisse avoir de nombreuses tâches.
Les migrations dans Laravel sont utilisées pour spécifier ce qui doit figurer dans une table de base de données. Exécutez la commande suivante pour créer une migration dans le dossier database/migrations :
composer create-project laravel/laravel todo-app && cd todo-app
Ensuite, remplacez la fonction up dans le nouveau fichier par ce qui suit qui ajoutera la table todo à la base de données avec les colonnes id, user_id, title, description,completed et timestamp :
php artisan breeze:install
Ensuite, exécutez la commande suivante pour ajouter la table todos à la base de données :
npm install && npm run dev
Les politiques de Laravel vous permettent de définir qui peut faire quoi avec une ressource particulière, dans ce cas, todos.
Voyons comment cela fonctionne en générant un TodoPolicy dans le dossier App/Policies à l'aide de la commande suivante :
php artisan migrate
Ensuite, dans le fichier TodoPolicy nouvellement créé, remplacez la classe TodoPolicy par le code suivant :
php artisan serve
Le code ci-dessus précise qu'un utilisateur peut créer une tâche, mais peut uniquement afficher, mettre à jour ou supprimer une tâche qui lui appartient.
Ensuite, configurons le contrôleur dans la section suivante.
Les contrôleurs de Laravel contrôlent les fonctionnalités de l'application pour une ressource particulière. Exécutez la commande suivante pour générer un TodoController dans App/Http/Controllers :
php artisan make:model Todo
Ajoutez le code suivant en haut du fichier TodoController nouvellement créé pour importer le modèle Todo pour les opérations de base de données et la classe Gate pour l'autorisation :
class Todo extends Model { use HasFactory; protected $fillable = [ 'title', 'description', 'completed', 'user_id' ]; public function user() { return $this->belongsTo(User::class); } }
Remplacez la méthode index par le code suivant qui récupère et renvoie toutes les tâches des utilisateurs connectés :
public function todos() { return $this->hasMany(Todo::class); }
La méthode Gate::authorize vérifie que l'utilisateur est connecté à l'aide de la méthode de stratégie viewAny que vous avez définie dans la section précédente.
Remplacez la méthode create par le code suivant qui vérifie que l'utilisateur est connecté avant de renvoyer le formulaire de création de tâches à l'utilisateur afin qu'il puisse créer des tâches :
php artisan make:migration create_todos_table
Remplacez la méthode store par le code suivant qui vérifie si l'utilisateur peut créer une tâche, valide la demande, crée la tâche et redirige l'utilisateur vers la page de la liste de tâches :
public function up(): void { Schema::create('todos', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->onDelete('cascade'); $table->string('title'); $table->text('description')->nullable(); $table->boolean('completed')->default(false); $table->timestamps(); }); }
Remplacez la méthode d'édition par le code suivant qui vérifie que l'utilisateur peut modifier cette tâche avant de renvoyer le formulaire de modification de la tâche rempli avec la tâche sélectionnée à l'utilisateur afin qu'il puisse la modifier :
php artisan migrate
Remplacez la méthode de mise à jour par le code suivant qui vérifie si l'utilisateur peut mettre à jour la tâche, valide la demande, met à jour la tâche sélectionnée et redirige l'utilisateur vers la page de la liste des tâches :
php artisan make:policy TodoPolicy --model=Todo
Remplacez la méthode destroy par le code suivant qui vérifie si l'utilisateur peut supprimer la tâche, la supprime et redirige l'utilisateur vers la page de la liste des tâches :
class TodoPolicy { /** * Determine if the user can view any todos. */ public function viewAny(User $user): bool { return true; } /** * Determine if the user can view the todo. */ public function view(User $user, Todo $todo): bool { return $user->id === $todo->user_id; } /** * Determine if the user can create todos. */ public function create(User $user): bool { return true; } /** * Determine if the user can update the todo. */ public function update(User $user, Todo $todo): bool { return $user->id === $todo->user_id; } /** * Determine if the user can delete the todo. */ public function delete(User $user, Todo $todo): bool { return $user->id === $todo->user_id; } }
Votre fichier TodoController devrait maintenant ressembler à ceci :
composer create-project laravel/laravel todo-app && cd todo-app
Maintenant que vos méthodes TodoController sont toutes définies, vous pouvez maintenant créer les vues de vos applications en créant un nouveau dossier todos dans le dossier resources/views. Après cela, créez les fichiers create.blade.php, edit.blade.php, index.blade.php dans le nouveau dossier todos.
Collez le code suivant dans le fichier index.blade.php :
php artisan breeze:install
Collez le code suivant dans le create.blade.php :
npm install && npm run dev
Collez le code suivant dans le edit.blade.php :
php artisan migrate
La gestion des itinéraires pour votre TodoController est relativement simple en utilisant la méthode des ressources dans Laravel. Faites cela en ajoutant le code suivant à la fin du dossier routes/web.php comme ceci :
php artisan serve
Le code ci-dessus utilise le middleware d'authentification pour protéger la ressource todos. Vous devriez maintenant pouvoir visiter les itinéraires suivants dans votre application après avoir été connecté :
Vous pouvez désormais créer, modifier et supprimer des tâches, MAIS uniquement en tant qu'utilisateur connecté et propriétaire des tâches sélectionnées en cas de modification et de suppression.
Et c'est tout ! Vous venez de créer une application de tâches réaliste qui permet aux utilisateurs de créer, afficher, modifier et supprimer UNIQUEMENT leurs propres tâches. N'hésitez pas à me faire savoir si vous avez des corrections, des suggestions ou des questions dans les commentaires !
Enfin, n'oubliez pas de me suivre ici sur Dev, LinkedIn et Twitter. Merci beaucoup d'avoir lu, et à bientôt dans le prochain !
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!