FOS UserBundle访问被拒绝
问题描述:
我正尝试使用FOS UserBundle来管理我的项目中的用户。FOS UserBundle访问被拒绝
这里是我的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;
}
的$用户> 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已添加在我的测试)
但是,当我尝试达到像“/管理/我的/路线”的路线ñ我有一个403访问被禁止。
任何想法为什么Symfony不希望我的用户访问管理页面?
编辑:
当我在探查一下,用户只需[ROLE_USER] ...
谢谢。
答
我终于搞定了。
感谢Zizoujab,我试过FOSUserBundle的命令,以促进用户:
> php app/console fos:user:promote myUser
它工作得很好。但是,因为我的服务器上没有ssh访问权限和任何其他命令行工具,所以我需要通过PHP代码来完成。
所以我去了使用FOS \ UserBundle \ Util \ UserManipulator对用户执行操作的命令代码FOS \ UserBundle \ Command \ PromoteUserCommand。
所以,如果你想直接在你的控制器中修改你的用户,你可以使用它,但我不知道这是否是最好的方法。只需通过像这样的容器调用它:
/**
* @Route("/user/{id}", name="test_user")
* @ParamConverter("user" , class="MyBundle:User")
*/
public function testUserAction(UserInterface $user)
{
$userManipulator = $this->container->get("fos_user.util.user_manipulator");
$userManipulator->addRole($user,'ROLE_ADMIN');
return new Response();
}
希望它有帮助。
当你设置用户角色?在设置它们之前,symfony2安全系统可能正在查看您的用户角色。 – zizoujab 2014-09-13 22:20:15
我将它们设置在我的控制器testGroupsAction中:我将“ROLE_ADMIN”添加到我的$用户,然后将其保存到我的数据库中。当我得到我的User对象时,当我使用$ user-> getRoles()(看看我的var_dump)时,我有这个“ROLE_ADMIN”。 因此,如果安全系统检查我的用户角色,它应该让我新添加的一个权利? 我使用profiler数据编辑了我的帖子。希望能帮助到你。 – 2014-09-13 22:25:23
我怀疑你在添加角色时有问题,因为在profiler中只有'ROLE_USER'在那里。尝试使用命令行添加角色admin并查看发生了什么事情https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/command_line_tools.md#4-promote-a-user – zizoujab 2014-09-13 22:37:00