2017-10-20 22 views
1

In meiner Website möchte ich einigen Benutzern die Möglichkeit geben, ihre Rolle durch Klicken auf eine Schaltfläche zu ändern. Ich setzte es auf folgende Weise:Zugriff auf verbotene Benutzerrolle nach Änderung

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

Es funktioniert prima, nachdem die Datenbank überprüfen, und ich kann in der Hauptsteuerung die Flagge ohne Probleme erholen. Das Problem ist das Folgende: Nach dem Klicken auf die Schaltfläche und Zugriff auf eingeschränkte Seiten für Benutzer, die ROLE_MEDIA haben, erhalte ich einen Fehler 403. Es scheint, dass Symfony die neue Benutzerrolle nicht erkennt. Ich beschränken einige Seiten mit dem folgenden Code:

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

Ich verstehe nicht das Problem, weil ich die richtigen Werte in meinem Controller ... Vielen Dank im Voraus zugreifen kann

+1

versuchen zu überprüfen, eine Lösung finden [hier] (https://github.com/symfony/symfony/issues/12025) –

+0

es, nachdem Sie funktioniert abzumelden und dann wieder einloggen? – dmnptr

+0

Danke für die URL, die du @VitaliyRyaboy zur Verfügung gestellt hast !! Ich könnte dort eine Lösung finden, danke für Ihre Hilfe –

Antwort

0

ich, dass die einfachste Lösung gefunden ist Sitzung zu aktualisieren, indem Sie Session-ID zu regenerieren:

wenn Sie
$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(); 
} 
Verwandte Themen