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

时间:2012-03-02 19:56:49

标签: php symfony roles

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

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

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

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

1 个答案:

答案 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);