Symfony 4: Authentification via CAS et gestion des rôles via Oracle DB

Petit nouveau ! | 2 Messages

02 oct. 2018, 14:12

Je suis actuellement sur un nouveau projet et j'utilise symfony 4. Pour ce projet, je dois impérativement me connecter via un système de cas centralisé dans l'organisme où je travaille. Le souci, c'est que je peux récupérer le login utilisé via ce système de cas et ... c'est tout. Or, j'ai une gestion des rôles assez étendues que je stocke dans une table d'une base de données oracle.

Pour l'authentifier via le CAS, j'utilise le bundle suivant: prayno casauth bundle (https://github.com/PRayno/CasAuthBundle). L'authentification fonctionne bien et je peux récupérer mes droits dans la base de données via doctrine sans souci dans un contrôleur de mon application.

Mon problème est que je n'ai pas accès à doctrine dans le bundle prayno et donc, je ne parviens pas à récupérer mes rôles au moment où je me connecte. Du coup, j'ai lu qu'il fallait appeler le bundle Doctrine qui gère les entités dans le constructeur de la classe afin d'avoir accès au repository. Voici le bout de code qui gère la connexion:

Code : Tout sélectionner

class CasUserProvider implements UserProviderInterface { /** * Provides the authenticated user a ROLE_USER * @param $username * @return CasUser * @throws UsernameNotFoundException */ private $em; public function __construct(EntityManager $em) { $this->em = $em; } public function loadUserByUsername($username) { if ($username) { $password = '...'; $salt = ""; $this->em->getRepository(FscDroitsBundle::class)->findRights($username); $roles = array('ROLE_USER'); foreach ($entities as $data) { array_push($roles, $data->getBundle()); }; return new CasUser($username, $password, $salt, $roles); }
Le message d'erreur que j'obtiens est le suivant:
Too few arguments to function CasUserProvider::__construct(),
0 passed in and exactly 1 expected.
Le souci que j'ai est que je ne vois pas où et comment je dois passer l'argument à ma fonction.

Petit nouveau ! | 4 Messages

04 oct. 2018, 02:06

Salut ! Je suis en plein apprentissage de Symfony, mais je vais quand même essayer d'aider ...

Je pense qu'il faut que tu charges ta classe en tant que service, pour y injecter ton EntityManager manuellement. Tu as regardé de ce côté ? https://symfony.com/doc/current/securit ... vider.html

D'après la documentation, ta classe est chargé par défaut en tant que service. Je pense que ce doit être possible d'écraser ce chargement pour pouvoir faire ce que tu souhaites.

J'espère avoir pu t'aider ... Bonne journée !

Petit nouveau ! | 1 Messages

14 janv. 2020, 19:51

Bonjour,

Avez vous trouvez une solution au Provider, si vous pouvez la partager ça sera sympa :D

Deuxième question : je suis sur le point d'utiliser le Bundle PRayno/CasAuthBundle est je suis bloqué puisque il y a pas vraiment de docs sur comment effectuer des appelles depuis le Controller vers le serveur CAS . Si vous pouvez nous mettre de l'eau dans la bouche :priere: ça sera appréciable =D>