Laravel

Un framework qui rend heureux

Voir cette catégorie
Vers le bas
Cours Laravel 10 – la sécurité – les équipes
Mardi 28 février 2023 13:54

Dans cet article, on va finir l'exploration des possibilités de Jetstream. On a déjà vu précédemment qu'on dispose avec ce package de tout l'arsenal de l'authentification (connexion, déconnexion, oubli du mot de passe, vérification de l'email, vérification du mot de passe...). On a vu également que l'utilisateur dispose d'une gestion complète de son profil (informations personnelles, changement du mot de passe, authentification à double facteur, purge de session...). On va voir dans cet article que Jetstream offre aussi la possibilité de gérer des équipes (teams) avec des permissions.

Installation

Pour l'installation on retrouve exactement ce qu'on a vu. En partant d'un Laravel 10 tout neuf, on installe Jetstream :

composer require laravel/jetstream
Mais ensuite dans la mise en route de jetstream, on ajoute une option :
php artisan jetstream:install livewire --teams
Et enfin, on génère les assets et les tables de la base de données :
npm install
npm run dev
php artisan migrate
On voit apparaître trois tables nouvelles :

Ces tables correspondent à la gestion des équipes (teams). On a la table pour enregistrer les équipes (teams) et la table pivot pour la relation n:n avec les utilisateurs (team_user). D'autre part, on a la table team_invitations pour les invitations.

Quand un utilisateur s'enregistre, on va trouver un nouveau menu dans son dashboard :

On trouve des liens pour la gestion des équipes. Par défaut, un utilisateur dispose au départ d'une équipe personnelle, ici Durand's Team. On la retrouve dans la table teams :

L'utilisateur (avec l'item Team Settings du menu) peut gérer complètement les équipes : On voit ici qu'il peut modifier le nom de son équipe personnelle et qu'il peut gérer les membres.

Gérer les équipes

On peut créer une nouvelle équipe avec l'item Create New Team du menu, on arrive alors sur ce formulaire :

Là, on demande juste un nom. Lorsque la nouvelle équipe est créée, on la retrouve dans le menu :

Là, avec un clic, on peut passer d'une équipe à une autre : C'est l'équipe active à un moment donné. On peut aussi supprimer une équipe :

Gestion des membres

On peut ajouter un membre à une équipe à partir de ce formulaire :

On renseigne l'email qui doit évidemment correspondre à celui d'un utilisateur déjà enregistré dans la base. On spécifie aussi son rôle, on voit qu'on a le choix entre deux rôles.

Une fois que le membre est effectivement ajouté, il apparaît dans la liste des membres : On peut modifier le rôle en utilisant le lien, ici Editor : Si l'email n'existe pas dans la base, on se contente d'envoyer une invitation : On envoie automatiquement un email d'invitation : Là, on peut créer un compte. On est alors ajouté dans l'équipe :

Les rôles et permissions

On a vu ci-dessus qu'on dispose de deux rôles (Administrator et Editor), mais comment en ajouter ou les modifier ? De plus, quelles sont les permissions associées et comment changer ça ? On ne trouve rien au niveau de l'interface alors, il faut aller piocher dans le code...

On trouve tout ça dans le provider JetstreamServiceProvider :
protected function configurePermissions(): void
{
    Jetstream::defaultApiTokenPermissions(['read']);

    Jetstream::role('admin', 'Administrator', [
        'create',
        'read',
        'update',
        'delete',
    ])->description('Administrator users can perform any action.');

    Jetstream::role('editor', 'Editor', [
        'read',
        'create',
        'update',
    ])->description('Editor users have the ability to read, create, and update.');
}
On peut donc facilement jouer sur les rôles et permissions :
Jetstream::role('writer', 'Author', [
  'create',
  'update',
])->description('Author users have the ability to create, and update.');

Les autorisations et l'équipe active

C'est bien de prévoir des permissions, mais encore faut-il pouvoir les utiliser... Jetstream ajoute un trait dans le modèle User :
use Laravel\Jetstream\HasTeams;

...

class User extends Authenticatable
{
    use HasTeams;
Dans ce trait, on trouve la méthode hasTeamPermission qui va permettre de vérifier ces permissions sur les requêtes entrantes.

Je n'ai pas encore parlé des autorisations dans ce cours, pour ceux qui sont pressés la documentation est ici.

Mais le trait ajouté ne se limite bien sûr pas aux permissions. On peut aussi connaître l'équipe active de l'utilisateur :

$user->currentTeam
On peut obtenir des tas d'autres renseignements dont vous avez le détail dans la documentation.

Conclusion

Jetstream offre une gestion des rôles et permissions au travers de la notion d'équipes (teams), ce qu'on appelle en général groupes dans d'autres librairies. On peut donc se passer de package supplémentaire pour accomplir des actions de gestion des rôles et permissions.

 


Par bestmomo

Aucun commentaire