2017-10-20 64 views
1

Sur mon site Web, je souhaite donner à certains utilisateurs la possibilité de changer de rôle en cliquant sur un bouton. Je mis en œuvre de la manière suivante:Accéder à un rôle utilisateur interdit après l'avoir modifié

$post = Request::createFromGlobals(); 
if($post->request->has('change') && $user->hasRole('ROLE_MEDIA') == False){ 
     $em = $this->getDoctrine()->getManager(); 
     $user->setRoles(array('ROLE_MEDIA')); 
     $em->flush(); 
} 

Il fonctionne très bien, vérifiez après la base de données et je peux récupérer dans le contrôleur principal du drapeau sans problème. Le problème est le suivant: après avoir cliqué sur le bouton et avoir accédé aux pages restreintes aux utilisateurs qui ont le ROLE_MEDIA, j'obtiens une erreur 403. Il semble que Symfony ne détecte pas le nouveau rôle de l'utilisateur. Je limiterai quelques pages en utilisant le code suivant:

/** 
* 
* @Security("has_role('ROLE_MEDIA')") 
*/ 

Je ne comprends pas le problème parce que je peux accéder aux bonnes valeurs dans mon contrôleur ... Merci d'avance

+1

essayer de vérifier si vous trouvez une solution [ici] (https://github.com/symfony/symfony/issues/12025) –

+0

ça marche après que vous déconnectez puis se reconnecter? – dmnptr

+0

Merci pour l'URL que vous avez fourni @VitaliyRyaboy !! Je pourrais trouver une solution là-bas, merci pour votre aide –

Répondre

0

J'ai trouvé que la meilleure solution est de rafraîchir la session en régénérant ID de session:

$post = Request::createFromGlobals(); 
if($post->request->has('change') && $user->hasRole('ROLE_MEDIA') == False){ 
     $em = $this->getDoctrine()->getManager(); 
     $user->setRoles(array('ROLE_MEDIA')); 
     $em->flush(); 
     $this->get('session')->migrate(); 
}