2012-03-02 67 views
2

我有一个情况我需要检查的角色谁不登录的用户。如何检查未登录的用户是否有角色?

我本来只是查询users表的roles场,看看是否有问题的作用得到了遏制,但是这并没有考虑到角色的发展。例如,如果用户已被授予ROLE_ADMIN,他们也将拥有ROLE_USER。但是,数据库中不会出现ROLE_USER,因为在这种情况下,它包含在ROLE_ADMIN中。我有点不熟悉Symfony2的安全机制的内部工作 - 我想可能为用户“模拟”一个令牌(基于他们的用户名),但我不知道如何或如果甚至有可能。我一直在挖掘安全组件,但尚未找到解决方案。

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

+0

我没有给你一个解决方案,但尝试'RoleHierarchyVoter'看这是什么安全系统用来解析目前的角色。上次我查看它时,这个类实际上是为了自己的目的读取安全配置​​,并且没有可以从中查询角色层次结构的中央位置。 – Kasheen 2012-03-02 21:06:05

回答

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

这段代码是写在控制器中还是可以直接在我的'User'类中使用?我问容器,这是不总是可以访问的...我还不明白容器对象。 – Throoze 2012-04-21 04:49:50

+0

是的,它适用于控制器或任何'ContainerAware'对象。您可以在'User'类中创建一个方法,并传递角色和参数来使用它。但我认为“用户”类不适合它。创建一个服务并将该方法放在那里会更好。你可以检查[this](http://stackoverflow.com/questions/6124444/how-can-i-access-a-service-outside-of-a-controller-with-symfony2)的问题。 – 2012-04-21 05:13:19