par
fred200175 » 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.
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]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);
}[/code]
Le message d'erreur que j'obtiens est le suivant:
[quote]Too few arguments to function CasUserProvider::__construct(),
0 passed in and exactly 1 expected. [/quote]
Le souci que j'ai est que je ne vois pas où et comment je dois passer l'argument à ma fonction.