Bonjour tout le monde.
Alors voila, je suis assez nouveau sur Symfony et je souhaite développer un projet assez complet et complexe avec cette techno (SF4).
Étant donné la complexité de ce que je souhaite faire on ma conseillé de partir sur Sonata (admin bundle) que je trouve plutôt pas mal.

J'ai réussi à plus ou moins à le prendre en main sauf pour ce qui est de la partie gestion d'utilisateurs admin.
Je souhaite avoir un super admin avec tous les droits et la possibiltié de créer des droits, des groupes d'utilisateurs et des utilisateurs admin en leur associant des droits ( Backend uniquement, en Front j'ai une idée de comment gérer ), chose assez complète mais classique.

Pour ça, Sonata intègre le FosUserBundle mais j'ai des soucis d'installation.

Bref ma question n'est pas technique, mais je cherche des conseils. Est-ce que le FosUserBundle est la meillere option que j'ai ? Y a-t-il une meilleur solution ? Le composant de sécurité est bien fait aussi, est-ce qu'on peut intégrer quelque chose de sur mesure à Sonata ? Est-ce que ca vaut le coup de faire un truc depuis 0 pour la gestion d'utilisateurs ou FosUserBundle vaut la peine de se casser la tête pour l'installation ?

Merci à ceux qui prendront le temps de m'aider un peu :)

3 réponses


Digivia
Réponse acceptée

Salut Alvin,
FosUserBundle présente de moins en moins d'intérêt, surtout avec SF4. Tu as encore quelques fonctionnalités sympa comme le mot de passer perdu, mais rien de compliqué à développer.
Perso, je ne l'utilises plus sur des projets Symfony 4.
Pour l'admin, Sonata est très complet, mais également plutôt complexe, car tu ne trouveras pas tout dans la doc. C'est le gros souci de ce bundle... Je te conseille de tester easyadmin, qui est vraiment super simple à prendre en main. Il peut intégrer FosUser, ou pas.
Il répond à 90% des besoins. Il est extensible et très bien fait. C'est d'ailleurs développé et suivi par Javier Eguiluz qui fait parti de l'équipe SensioLabs, même si ce bundle n'est pas directement maintenu par Sensio.
En espérant t'avoir aidé!

Salut ,
D'accord, j'ai commencé à développé une gestion d'utilisateurs sur mesure avec le composant de sécurité et je trouve ça plutôt pratique.
Je galère juste pour faire un module qui va lister les fonctionnalités du site. Il existe quelque chose qui permet de lister les routes ou quelque chose de semblable? J'arrive à créer des rôles, des utilisateurs, et de faire des associations entre les deux mais je ne vois pas comment lister les fonctionnalités pour y associer les rôles. Il y a une solution que symfony propose ou il faut développer quelque chose de sur me sure à ma propre manière?
Le sujet a un peu changé, désolé pour ça :)
Et oui ta réponse ma déjà bien aidé

Tu parles d'un sujet différent. Si j'ai bien compris, tu as l'interface pour créer et gérer tes users, leurs rôles et les groupes associés.

Ce que tu veux gérer maintenant, c'est la sécurité côté fonctionnel. Il existe de multiples solutions dans Symfony:

  • la plus simple : le firewall, qui permet, à partir d'une url de bloquer/autoriser un rôle. Par exemple :
access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, role: ROLE_ADMIN }
        - { path: ^/, role: ROLE_USER }

Dans ce cas, le login est accessible par tous (il vaut mieux, pour pouvoir s'authentifier!), et pour toutes les autres pages, il faut le ROLE_USER. Et pour les pages qui commencent par /admin, il faut le ROLE_ADMIN

  • Un peu plus élaboré, dans un controlleur, tu peux demander, pour une action particulière (dans une méthode), un rôle spécifique. Cela peut se faire très simplement au travers d'annotation (plus d'info ici : https://symfony.com/doc/current/best_practices/security.html#the-security-annotation)

  • Le top, ma solution préférée, car elle prend en charge d'aspect métier (et la logique sécurité est séparée dans une classe externe et donc ré-utilisable) les Voters (voir https://symfony.com/doc/current/security/voters.html). Dans ce cas, tu vas accéder à ton object métier (un article de blog par exemple) et pouvoir définir des permissions adaptées. Par exemple, le créateur d'un article pourra l'éditer, ou le supprimer, alors qu'un simple user ne pourra que le voir... En fait tu définis le comportement souhaité. C'est très puissant!