Bonjour,

Je suis en train de réaliser le portage d'une vieille application assez importante vers SF2. Au niveau des utilisateurs, il y a actuellement une table "commercial" (avec pour chacun des identifiants et mot de passe) et une table "contact", qui est en fait une table regroupant des centaines de contacts (nom, prénom...) utilisés par les commerciaux. Subtilité, certains de ces contacts peuvent également se connecter au site et avoir un accès limité à certaines fonctionnalités des commerciaux. Cela implique que les contacts ont également un couple login/password (s'ils n'en ont pas de spécifié, leur "compte utilisateur" n'existe pas. Les commerciaux peuvent créer et modifier les profils de tous les contacts, et les contacts connectés peuvent modifier leur propre profil.
Lorsqu'un visiteur se connecte, la table "commercial" est d'abord vérifiée puis la table "contact".

Pour le passage à SF2, j'hésite entre deux méthodes :
  • une seule classe User qui étend la classe de FOSUserBundle et un champ "type" pour les différencier).
    Avantage, je pense que ça va être plus simple à gérer (les contacts connectés ne voit rien des autres commerciaux ou contacts, les commerciaux voient tous les contacts, les admin voient tout...).
    Inconvénient, je dois regrouper tous les champs des contacts et des commerciaux en une seule table donc quelques champs vides (mais pas très grave). Mon gros problème est qu'il faudrait que je rende optionnelle la saisie d'un identifiant et mot de passe, et là je bloque.
  • Garder la classe FOSUserBundle minimale (identifiant/password, etc). Il n'y aurait donc une ligne de créée que si l'utilisateur a un compte (login/pass renseigné). Il me faudrait alors un moyen de lier la ligne de la table FOS avec soit "contact", soit "commercial" et charger les bonnes données en session au moment de la connexion.


Bref, la deuxième solution me semble plus propre mais complexe. La première solution me paraît plus simple mais je suis bloqué. J'ai lorgné du côté des solutions pour fournir deux "user providers" (ou utiliser une "chain provider") à FOSUserBundle mais je ne suis pas sûr d'avoir bien compris et je ne sais pas si c'est possible dans mon cas (les exemples que j'ai vu utilisait par ex un user provider en base et l'autre en LDAP).

Si quelqu'un pouvait m'aiguiller vers une base de solution, je lui en serais très reconnaissant !


Note: en relisant, je vois que je mélange encore les termes ORM et base de données (même si je fais la différence), mais je me soigne...