如何检查未登录的用户是否有角色?

Ste*_*nte 2 php roles symfony

我有一种情况需要检查未登录用户的角色.

我最初只是查询users表格的roles字段,看看问题中的角色是否被包含,但这并未考虑角色层次结构.例如,如果用户已被授予,ROLE_ADMIN他们也将拥有ROLE_USER.但是,您不会ROLE_USER在数据库中看到,因为在这种情况下它包含在ROLE_ADMIN.

我对Symfony2的安全机制的内部工作方式有点不熟悉 - 我想为用户"模仿"一个令牌(基于他们的用户名),但我不确定如何,或者甚至可能.我一直在挖掘安全组件,但尚未找到解决方案.

是否可以检查未登录用户的角色?

Mun*_*Das 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);
Run Code Online (Sandbox Code Playgroud)