Я пытаюсь использовать FOS UserBundle для управления пользователями в моем проекте.FOS UserBundle Access Denied
Вот мой security.yml файл:
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 }
я вручную установить права моего пользователя в мой контроллер, как показано ниже:
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;
}
в $ user-> getRoles (функция) возвращает мне массив со всеми ролями моего пользователя:
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 был добавлен во время моих тестов)
Однако, когда я пытаюсь достичь маршрута, например «/ admin/my/route», у меня есть запрет доступа 403.
Любая идея, почему Symfony не хочет, чтобы мой пользователь обращался к страницам администратора?
Edit:
Когда я смотрю в профайлер, пользователь имеет только [ROLE_USER] ...
Спасибо.
Когда вы устанавливаете роли пользователя? Система Symfony2 может просматривать ваши роли пользователей до их установки. – zizoujab
Я установил их в свой контроллер testGroupsAction: я добавляю «ROLE_ADMIN» к моему $ user, а затем сохраняю его в своей базе данных. Когда я верну свой объект User, у меня есть этот «ROLE_ADMIN», когда я использую $ user-> getRoles() (посмотрите на мой var_dump). Итак, если система безопасности проверяет роли моего пользователя, она должна получить мою недавно добавленную право? Я редактировал свой пост с данными профилировщика. Надеюсь, поможет. –
Я сомневаюсь, что у вас возникли проблемы с добавлением ролей, поскольку в профилировщике существует только «ROLE_USER». попробуйте добавить роль admin с командной строкой и посмотреть, что происходит https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/command_line_tools.md#4-promote-a-user – zizoujab