Bonjour,

J'aimerais avoir un avis sur l'organisation et la gestion de comptes utilisateurs, j'ai une application qui gère 3 types d'utilisateurs (Entreprise, Institution, Student) ces trois utilisateurs n'ont rien en commun apart une adresse email et un mot de passe, ma question serait de savoir comment sur symfony je peux géré l'authentification et surtout comment je pourrais modéliser la base de donnée pour permettre à ces trois utilisateurs de se connecter et d'effectuer des actions en fontion de leur type

Ce que je fais

Pour l'instant j'ai créé une entité User qui contient uniquement les informations de connexion (mot de passe, email et roles) en suite cette entité à des propriétés (Entreprise, Institution, Student) qui sont des entités à part en relation OneToOne nullable avec User

Quand je crée une Entreprise, je crée aussi un User et je fais la liaison avec l'entreprise pour permettre l'authentification de cette dernière en rajoutant le rôle ROLE_ENTREPRISE sur l'entité, pareil pour les autres type d'utilisateurs, en gros j'ai séparé les données d'authentification des données de l'utilisateur lui-même

$entreprise = $this->getUser()->getEntreprise();

Ceci rajoute une complexité dans le code, surtout lors de la recupération de l'utilisateur connecté en fonction du type, j'ai des requètes SQL supplémentaires même en utilisant un fetch EAGER sur l'entité User ça impacte les performances de l'application

Une Alternative ?

face à ce cas d'utilisation, il y'aurait il une alternative ou une meilleure façon d'organiser cette gestion de compte utilisateur ? comment le feriez-vous ?

2 réponses


Jessy Brs
Réponse acceptée

Salut, je pense que tu as déjà la solution et que cela ne confléxie pas ton projet. Je n'ai jamais tenté différent rôles mais je pense que ça suite la logique du rôle.
Dans ton entity à travers l'userInterface, il te faut une méthod "role" tu peux configurer comme tu dis chaque rôle selon l'entité.

Et depuis la le fichier security.yaml, tu peux restreintre les rôles.
Voire utilisé l'annotation @isGaranted
https://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/security.html

Méthode getRole()