Autorisation : Comprendre les politiques dans Laravel

Linda Hamilton
Libérer: 2024-10-18 22:08:31
original
337 Les gens l'ont consulté

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.

Créer une application de base

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ensuite, exécutez la commande suivante pour installer Laravel Breeze :

php artisan breeze:install
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Une fois cela fait, exécutez la commande suivante pour afficher votre application dans le navigateur :

php artisan serve
Copier après la connexion
Copier après la connexion
Copier après la connexion

Vous devriez maintenant voir votre nouvelle application Laravel sur localhost:8000 ressemblant à ceci :

Authorization: Understanding Policies in Laravel

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.

Configuration du modèle

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
Copier après la connexion
Copier après la connexion

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);
    }
}
Copier après la connexion
Copier après la connexion

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);
    }
Copier après la connexion
Copier après la connexion

Le code ci-dessus connectera le modèle User au modèle Todo afin qu'il puisse avoir de nombreuses tâches.

Configuration de la migration

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ensuite, exécutez la commande suivante pour ajouter la table todos à la base de données :

npm install && npm run dev
Copier après la connexion
Copier après la connexion
Copier après la connexion

Configuration de la stratégie

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ensuite, dans le fichier TodoPolicy nouvellement créé, remplacez la classe TodoPolicy par le code suivant :

php artisan serve
Copier après la connexion
Copier après la connexion
Copier après la connexion

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.

Configuration du contrôleur

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
Copier après la connexion
Copier après la connexion

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);
    }
}
Copier après la connexion
Copier après la connexion

Méthode d'indexation

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);
    }
Copier après la connexion
Copier après la connexion

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.

Créer une méthode

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
Copier après la connexion

Méthode de stockage

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();
        });
    }
Copier après la connexion

Modifier la méthode

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
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Méthode de mise à jour

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
Copier après la connexion

Méthode de destruction

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;
    }
}
Copier après la connexion

Votre fichier TodoController devrait maintenant ressembler à ceci :

composer create-project laravel/laravel todo-app && cd todo-app
Copier après la connexion
Copier après la connexion
Copier après la connexion

Configuration des vues

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.

Vue d'index

Collez le code suivant dans le fichier index.blade.php :

php artisan breeze:install
Copier après la connexion
Copier après la connexion
Copier après la connexion

Créer une vue

Collez le code suivant dans le create.blade.php :

npm install && npm run dev
Copier après la connexion
Copier après la connexion
Copier après la connexion

Modifier la vue

Collez le code suivant dans le edit.blade.php :

php artisan migrate
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Configuration des itinéraires

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
Copier après la connexion
Copier après la connexion
Copier après la connexion

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é :

  • /todos : répertorie les tâches de tous les utilisateurs
  • /todos/create : affiche le formulaire de création de tâches
  • /todos/edit/1 : affiche le formulaire permettant de modifier une tâche avec l'identifiant donné ; 1 dans ce cas.

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.

Conclusion

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!

source:dev.to
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!