Symfony 2.3: Comment puis-je actualiser l'utilisateur authentifié à partir de la base de données?
Dire par exemple je l'octroi d'un nouveau rôle pour l'utilisateur actuellement authentifié dans un contrôleur, comme suit:
$em = $this->getDoctrine()->getManager();
$loggedInUser = $this->get('security.context')->getToken()->getUser();
$loggedInUser->addRole('ROLE_XYZ');
$em->persist($loggedInUser);
$em->flush();
Sur le chargement de la page suivante, quand je prends l'utilisateur authentifié de nouveau:
$loggedInUser = $this->get('security.context')->getToken()->getUser();
Ils ne disposent pas du rôle. Je suppose que c'est parce que l'utilisateur est stocké dans la session et doit être actualisé.
Comment puis-je faire cela?
J'utilise FOSUserBundle si cela fait une différence.
Est la base de données mise à jour?
Oui la base de données est mise à jour. Donc, si je me déconnecte, et à nouveau, puis le nouveau rôle est pris en compte.
J'ai été vérifier pour un nouveau rôle dans un template twig à l'aide de
c'est parce que hasRole vérifie les rôles exacts. Il ignore le rôle de la hiérarchie.. par exemple: est ROLE_SUPER_ADMIN a ROLE_USER, ROLE_ADMIN.. Si vous cochez hasRole('ROLE_ADMIN')--- faux, hasGranted('ROLE_ADMIN')--- vrai
Merci Alex, toutefois, l'appel à
Oui la base de données est mise à jour. Donc, si je me déconnecte, et à nouveau, puis le nouveau rôle est pris en compte.
J'ai été vérifier pour un nouveau rôle dans un template twig à l'aide de
if is_granted('ROLE_XYZ')
. J'ai changé de ce if app.user.hasRole('ROLE_XYZ')
et maintenant, il est de travail. Étrange...c'est parce que hasRole vérifie les rôles exacts. Il ignore le rôle de la hiérarchie.. par exemple: est ROLE_SUPER_ADMIN a ROLE_USER, ROLE_ADMIN.. Si vous cochez hasRole('ROLE_ADMIN')--- faux, hasGranted('ROLE_ADMIN')--- vrai
Merci Alex, toutefois, l'appel à
is_granted('ROLE_XYZ')
retourne VRAI que dès que j'ai déconnecté et de revenir à nouveau.OriginalL'auteur Nada_Surf | 2013-10-31
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Je peux confirmer que cette solution fonctionne encore sur 2.6.3
Travaille toujours dans la 2.8
En 3.4 fonctionne aussi
OriginalL'auteur
Il n'est pas nécessaire pour le jeton de réinitialisation dans la réponse précédente. Seulement, dans la sécurité de votre fichier de configuration (de sécurité.yml, etc...), ajouter ceci:
Apparemment, vous avez besoin d'une certaine réputation à faire. Smart se déplace tout autour.
vous ne savez pas comment je suis apprécier
OriginalL'auteur
OriginalL'auteur