我是Symfony 3的新手。我正在尝试配置用户和管理员可以访问的路由。我有两个角色:ROLE_USER
和ROLE_ADMIN
,我已将security.xml
配置如下:
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
access_control:
- { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/, role: ROLE_USER }
我想允许ROLE_ADMIN
个用户访问除login
以外的所有路由。
我希望允许ROLE_USER
用户访问除login
和admin
之外的所有路由
我不确定原因,但看起来所有ROLE_ADMIN
个用户也会收到ROLE_USER
。我已将ROLE_USER
设置为访问所有路由(在其路径中设置^/
),其中包含/admin
和/login
路由。
问题是:如何设置正确禁止ROLE_USER
访问/admin
和/login
路由的路径?
答案 0 :(得分:4)
我不知道为什么,但看起来所有ROLE_ADMIN用户也会收到 ROLE_USER
嗯,这就是角色层次结构的含义,你自己写了ROLE_ADMIN: ROLE_USER
。因此,由于管理员拥有比用户更多的权限,因此您无法限制他访问用户资源。
我不知道为什么你想要这种行为,但你可以通过控制器中的解决方法实现它。类似的东西:
/**
* @Route("/login", name="login")
*/
public function loginAction()
{
$context = $this->container->get('security.context');
$user = $context->getToken()->getUser();
$admin = $context->isGranted('ROLE_ADMIN');
if ( $admin ){
//hey I'm an admin, please redirect me to the correct ressource
}
if ( $user ){
//hey I'm a simple user, what do you want me to do ?
}
}