gpt4 book ai didi

php - Symfony2 中 isGranted 的替代品

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:50:38 24 4
gpt4 key购买 nike

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

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

那么,有没有像 isGranted 为当前用户做的那样在层次结构树中查找用户角色的函数?

编辑

我找到了这个解决方案:

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

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

有什么想法吗?

最佳答案

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

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

所以回答你的问题:

我认为对于其他用户(或不知道任何其他用户)来说,没有像 isGranted 这样的功能,但您可以编写自己的服务,允许使用 security.role_hierarchy(请注意这是私有(private)服务)。

顺便说一句,hasRole 在大多数情况下可能就足够了,所以也许你应该考虑一下你想做什么 ;)

关于php - Symfony2 中 isGranted 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12578182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com