Securiser un backoffice et un frontoffice avec des providers différents

De manière générale, un backoffice se sécurise rapidement avec FosUserBundle, et c’est très bien ainsi, car on ne veut pas s’embêter à recoder tout un système d’authentification classique (login/rappel de mot de passe, changement de mot de passe etc)

Mais, de manière générale, côté front, il est courant de vouloir à la fois avoir une table différente de FosUser, et avoir une authentification complètement personnalisée (si vous utilisez FosUserBundle, il faudra surcharger les contrôleurs pour pouvoir faire ce que vous voulez)

Dans une série de précédents articles, nous avons vus comment créer une authentification de A à Z sans FosUserBundle.

J’ai repris les sources dans un nouveau projet (https://github.com/jpsymfony/REST-BEHAT)  en combinant FosUserBundle pour le backoffice et une authentification personnalisée pour le front.

Comment mettre en place les providers et firewalls?

Comme à l’accoutumée lorsqu’on veut hériter d’un bundle, j’en ai créé un que j’ai appelé BackUserBundle, et qui étend FosUserBundle.

Dans le CoreBundle, j’ai placé les entités et les repositories. Les formTypes se trouvent dans les bundles où ils sont appelés (ici BlogBundle)

Voici comment se présente le fichier security.yml:

Comme vous pouvez le voir, il y a deux encoders, un faisant appel à Fos, l’autre étant ma classe de User.

Concernant les providers, je déclare les deux.

Côté firewalls, j’ai l’habituel dev, puis le backoffice, et enfin le frontoffice. Petite subtilité, remarquez que pour chaque firewall, j’ai indiqué quel provider était utilisé, sinon Symfony ne sait pas lequel choisir et prend le premier qu’on lui donne (ici celui de Fos, ce qui revient à être refoulé à l’authentification)

Et enfin, côté access_control, uniquement du classique, puisque je sécurise  l’interface admin, sécurise l’espace authentifié d’un utilisateur et autorise le reste en anonymous.

Si vous désirez tester l’application, n’oubliez pas de lancer la commande php app/console doctrine:fixtures:load pour avoir des users en base (cf le détail des fixtures dans CoreBundle/DataFixtures)

Rédigé par

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *