J'essaie d'utiliser FOS UserBundle pour gérer les utilisateurs de mon projet.FOS UserBundle Accès refusé
Voici mon security.yml fichier:
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
in_memory:
memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: true
anonymous: true
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
J'ai mis manuellement les droits de mon utilisateur dans mon contrôleur comme ci-dessous:
public function testGroupsAction(UserInterface $user)
{
$user->addRole("ROLE_ADMIN");
$this->getDoctrine()->getManager()->persist($user);
$this->getDoctrine()->getManager()->flush();
echo "<pre>";
\Doctrine\Common\Util\Debug::dump($user->getRoles());
echo "</pre>";die;
}
la fonction $ user-> getRoles() me retourne un tableau avec les rôles de tout mon utilisateur:
array (size=3)
0 => string 'ROLE_SUPER_ADMIN' (length=16)
1 => string 'ROLE_ADMIN' (length=10)
2 => string 'ROLE_USER' (length=9)
(ROLE_SUPER_ADMIN a été ajouté lors de mes tests)
Cependant, lorsque j'essaie d'atteindre un itinéraire comme "/ admin/mon/route" n j'ai un accès 403 interdit.
Une idée de pourquoi Symfony ne veut pas que mon utilisateur accède aux pages d'administration?
Edit:
Quand je regarde dans le profileur, l'utilisateur ne dispose que [ROLE_USER] ...
Merci.
lorsque vous définissez des rôles d'utilisateur? Le système de sécurité de symfony2 peut regarder vos rôles utilisateur avant de les définir. – zizoujab
Je les ai définies dans mon contrôleur testGroupsAction: J'ajoute le "ROLE_ADMIN" à mon utilisateur $, puis je l'enregistre dans ma base de données. Quand je récupère mon objet Utilisateur, j'ai ce "ROLE_ADMIN" quand j'utilise $ user-> getRoles() (regardez mon var_dump). Donc, si le système de sécurité vérifie les rôles de mon utilisateur, il devrait obtenir mon nouvel ajouté droit? J'ai modifié mon message avec les données du profileur. J'espère que cela aide. –
Je doute que vous ayez des problèmes dans l'ajout de rôles puisque dans le profileur seulement 'ROLE_USER' est là. essayez d'ajouter le rôle admin avec la ligne de commande et voyez ce qui se passe https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/command_line_tools.md#4-promote-a-user – zizoujab