gpt4 book ai didi

php - Symfony2 角色/组 - is_granted 未检测用户拥有的角色

转载 作者:可可西里 更新时间:2023-10-31 22:09:55 24 4
gpt4 key购买 nike

我遵循了 Symfony2 cooking 书 (http://symfony.com/doc/current/cookbook/security/entity_provider.html) 中的“如何从数据库(实体提供者)加载安全用户”的方法,除了我没有使用自定义实体提供程序 - 这意味着我的用户类正在对角色使用延迟加载。

安全中的防火墙/访问控制一切正常。我有一些只有 ROLE_ADMIN 用户可以访问的路由和一些 ROLE_USER 用户可以访问的路由 - 这些工作正常。

问题是在我的基本模板中,我有一个显示如下的栏:

<p>Logged in as: {{ app.user.username }} {% if is_granted('ROLE_ADMIN') %}| <a href="{{ path('bassettprovidentia_skeleton_admindashboard') }}">Admin area</a> {% endif %}| <a href="#">Settings</a> | <a href="{{ path('bassettprovidentia_skeleton_logout') }}">Log out</a></p>

即使我的用户在数据库中具有 ROLE_ADMIN 角色(并且可以访问仅限于该角色的 URL),“管理区域”链接也不会显示!

同样的形式,我有这个:

<p>Roles: {% for role in app.user.roles %}{{ role.name }} [{{ role.role }}]{% if not loop.last %}, {% endif %}{% endfor %}</p>

效果很好!显示用户拥有的所有角色!

我做错了什么?

延迟加载是罪魁祸首吗?

它不会在其他地方引起问题。

最佳答案

好的 - 我找到了答案。我不敢相信它是如此明显。

app.user 对象(即第二个片段)中获取的用户角色显然是在我请求它们时从数据库中获取的。

is_granted() 调用显然使用 session 来查看用户拥有的角色。我一直在玩耍和改变角色,同时忘记注销和重新登录 - 难怪某些角色没有出现。

登录和退出并尝试不同的角色后,我可以确认一切正常。

如果我今天早上没有休息回来,我可能已经在原地打转几个小时了;那里有一个教训。

关于php - Symfony2 角色/组 - is_granted 未检测用户拥有的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10194373/

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