我遇到一种情况,需要为未登录的用户检查角色。
我最初只是简单地查询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