Bonjour,
Je souhaite réaliser un système permettant de créer des "projets", et je souhaiterais implémenter une gestion des droits relativement fine sur ces projets.
Pour parler concrètement, voici l'organisation des données :
- un membre (que j'appellerai le créateur) crée un projet. Il peut désigner un ou plusieurs "directeurs" sur le projet. Le créateur a bien sur tous les droits sur ledit projet.
- les directeurs peuvent recruter d'autres membres (que j'appellerai des "ouvriers") sur le projet dont ils ont la direction et ont quelques droits de plus que les ouvriers.
- les ouvriers peuvent seulement se connecter au projet, consulter les informations en lecture et poster des messages dans un forum dédié.
Je distingue donc 3 roles hiérarchisés comme suit : propriétaire > directeur > ouvrier. La situation serait donc simple s'il n'y avait qu'un seul projet, j'utiliserai 3 rôles statiques définis dans le security.yml. Mais ici, on peut créer autant de projets qu'on souhaite.
Je n'ai pas réussi à trouver quelque chose qui permet d'implémenter directement cette hiérarchie de rôles dynamiques, alors que cela me semble relativement classique comme organisation.
Ce que j'ai pensé à faire :
- pour chaque projet créer deux groupes : PROJECT_A_DIRECTOR, PROJECT_A_WORKER
- créer un voter qui détermine le bon niveau d'accès suivant si l'utilisateur est le créateur ou s'il appartient à l'un des groupes sus-cités
Cette solution est-elle "conforme à l'esprit SF2" ? Cela ne me semble pas très bien car l'héritage des rôles serait encodé dans le voter avec "if". J'aimerais bien pouvoir dire explicitement "pour cette entité projet, il y a tels rôles, qui se hiérarchisent ainsi", comme on le ferait avec des rôles statiques ; et cerise sur le gâteau, pouvoir gérer ces droits directement grâce au firewall. Encore une fois, je suis étonné que rien n'existe pour gérer ce genre d'architecture ; n'y a-t-il pas une solution plus élégante ?
Partager