Symfony2中isGranted的替代品

时间:2012-09-25 07:30:17

标签: php symfony roles

在我的应用程序中测试角色时,我找到了isGranted的函数SecurityContext。它工作得很好但现在我需要检查不是当前用户的用户的角色,因此isGranted对我不起作用。

我一直在寻找,并且我找到了用户的函数hasRole,问题是该函数没有查看Symfony的层次结构树,它只查看分配给用户的角色。

那么,是否有一个函数可以查找用户在isGranted等层次结构树中查找当前用户的角色?

修改

我找到了这个解决方案:

How to use the AccessDecisionManager in Symfony2 for authorization of arbitrary users?

我实现了它并且它有效,问题是它需要ContainerBuilder而我更喜欢不同的方法。

任何想法?

1 个答案:

答案 0 :(得分:0)

AFAIK SecurityContext基本上与Symfony\Component\Security\Core\Authentication\Token\TokenInterface一起使用,可以使用getUser方法获取当前用户。

如果未对用户令牌进行身份验证,则isGranted首先尝试验证用户令牌,然后使用名为AccessDecisionManager的类,它基本上遍历选民对象并调用它们(并且可以使用不同的策略)被称为选民的RoleHierarchyVoter使用Symfony\Component\Security\Core\Role\RoleHierarchy

回答你的问题:

我认为对于其他用户来说,没有像isGranted那样的功能(或者不知道任何用户),但是你可以编写自己的服务,允许使用security.role_hierarchy(只需要注意私有服务)。 / p> 在大多数情况下,BTW hasRole可能应该足够了,所以也许你应该考虑一下你想做什么;)