我有一种情况需要检查未登录用户的角色。
我最初只是查询users
表的roles
字段,看看是否包含了相关角色,但这并未考虑角色层次结构。例如,如果用户已被授予ROLE_ADMIN
,则他们也会ROLE_USER
。但是,您不会在数据库中看到ROLE_USER
,因为在这种情况下它包含在ROLE_ADMIN
中。
我对Symfony2的安全机制的内部工作方式有点不熟悉 - 我想为用户“模仿”一个令牌(基于他们的用户名)但是我不确定如何,或者它是否是甚至可能。我一直在挖掘安全组件,但还没有找到解决方案。
是否可以检查未登录用户的角色?
答案 0 :(得分:5)
要获取用户拥有的角色列表,请查看此代码
use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Security\Core\Role\RoleHierarchy;
//....
$roleHierarchy = new RoleHierarchy($this->container->getParameter('security.role_hierarchy.roles'));
$userRoles = array(new Role('ROLE_ADMIN')); // Or $securityContext->getToken()->getRoles()
$reachableRoles = $roleHierarchy->getReachableRoles($userRoles);