Symfony 2.1 - $this->get('security.context')->isGranted('ROLE_ADMIN') retourne false, même si Profiler dit que j'ai ce rôle
J'ai un Contrôleur de l'action (le Contrôleur a $this->securityContext
ensemble de $this->get('security.context')
via JMSDiExtraBundle):
$user = $this->securityContext->getToken()->getUser();
$groupRepo = $this->getDoctrine()->getRepository('KekRozsakFrontBundle:Group');
if ($this->securityContext->isGranted('ROLE_ADMIN') === false) {
$myGroups = $groupRepo->findByLeader($user);
} else {
$myGroups = $groupRepo->findAll();
}
Lorsque je me connecte à la dev
de l'environnement et de vérifier le profiler, je peux voir que j'ai le ROLE_ADMIN
rôle accordé, mais j'ai toujours la liste filtrée de Groupes.
J'ai mis un peu de débogage de code dans mon Contrôleur, et de Symfony RoleVoter.php
. La représentation de chaîne de Jeton dans mon Contrôleur ($this->securityContext->getToken()
) et celui de RoleVoter.php
sont les mêmes, mais quand j'utilise $token->getRoles()
, je reçois deux différents tableaux.
Mes Utilisateurs et les Rôles sont stockées dans la base de données par l'Utilisateur et le Rôle des entités. Est-ce un bug que j'ai trouvé ou je fais quelque chose de mal?
OriginalL'auteur GergelyPolonkai | 2012-08-21
Vous devez vous connecter pour publier un commentaire.
Finalement obtenu. Une idée vague a frappé mon esprit il y a une minute. Le problème a été causé ma propre
RoleHierarchyInterface
mise en œuvre. Mon idée de départ était de copier Symfony, mais le charger à partir de l'ORM au lieu desecurity.yml
. Mais à cause de cela, j'avais totalement réécrire lebuildRoleMap()
fonction. Le diff est comme suit:OriginalL'auteur GergelyPolonkai
Ce cas - les rôles sont définis et affichés dans Symfony profiler mais
isGranted
renvoie faux - peut-être s'est passé quand les noms de rôle ne démarre pas avec le préfixe ROLE_.Mauvais rôle nom:
USER_TYPE_ADMIN
Corriger le nom du rôle:
ROLE_USER_TYPE_ADMIN
OriginalL'auteur pekny.net