虽然在我的应用程序测试的角色,我发现功能isGranted的SecurityContext.它工作得很好,但现在我需要检查不是当前用户的用户的角色,因此isGranted对我不起作用.
我一直在寻找并找到了hasRole用户的功能,问题是这个功能没有查看Symfony的层次结构树,它只是查看分配给用户的角色.
那么,是否有一个函数可以查找用户在层次结构树中查找的角色,就像isGranted当前用户一样?
编辑
我找到了这个解决方案
如何在Symfony2中使用AccessDecisionManager来授权任意用户?
我实现它并且它有效,问题是它需要它ContainerBuilder,我宁愿采用不同的方法.
任何的想法?
基本上 AFAIK SecurityContextSymfony\Component\Security\Core\Authentication\Token\TokenInterface可以使用方法从哪里获取当前用户getUser。
如果用户令牌未经过身份验证,则isGranted首先尝试验证用户令牌,然后使用名为 的类AccessDecisionManager,该类基本上迭代投票者对象并调用它们(并且可以为此使用不同的策略)其中一个被调用的投票者是RoleHierarchyVoter使用Symfony\Component\Security\Core\Role\RoleHierarchy.
所以回答你的问题:
我认为对于其他用户(或不知道任何用户)来说,没有像 isGranted 这样的功能,但您可以编写自己的服务来允许使用security.role_hierarchy(请注意,这是私人服务)。
顺便说一句,hasRole大多数时候可能就足够了,所以也许你应该考虑一下你想做什么;)