Laravel 8

Cours Laravel 8 – la sécurité – les équipes

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 8 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 deux 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).

Quand un utilisateur s’enregistre on va trouver un menu enrichi dans son dashboard :

En plus du profil et de la gestion des tokens d’APi dont j’ai parlé dans le précédent article, 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 à 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 :

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()
{
    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 :

if ($request->user()->hasTeamPermission($team, 'update')) {
    // Ici on fait quelque chose si l'utilisateur a le droit de le faire
}

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 évidemment 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, ce que l’on faisait généralement avant Laravel 8.

 

Print Friendly, PDF & Email

Leave a Reply