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


How can I check if a non-logged in user has a role?

我遇到一种情况,需要为未登录的用户检查角色。

我最初只是简单地查询users表的roles字段,看看是否包含有问题的角色,但这并没有考虑角色继承。例如,如果用户已被授予ROLE_ADMIN,则他们也将具有ROLE_USER。但是,您不会在数据库中看到ROLE_USER,因为在本例中它包含在ROLE_ADMIN中。

我对Symfony2的安全机制的内部工作方式有点不熟悉——我想可能(根据用户的用户名)为用户"模拟"一个令牌,但我不确定如何,或者是否可能。我一直在研究安全组件,但还没有找到解决方案。

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

要获得用户拥有的角色列表,请查看以下代码

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

注意:自Symfony 4.3

以来,这些方法已被弃用