php – Symfony2角色/组 – is_granted不检测用户具有的角色
发布时间:2020-12-13 17:27:44 所属栏目:PHP教程 来源:网络整理
导读:我遵循了Symfony2厨师书(http://symfony.com/doc/current/cookbook/security/entity_provider.html)中的“如何从数据库(实体提供商)”加载安全用户的配方,除了我不使用自定义实体提供程序 – 这意味着我的用户类正在使用延迟加载的角色. 安全防火墙/访问控制
我遵循了Symfony2厨师书(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> 它工作正常!显示用户所有的角色! 我究竟做错了什么? 是否懒惰加载? 这不是其他地方的问题.
好的 – 我找到了答案.我不知道这是多么明显.
从应用程序用户对象(即第二个代码段)获取的用户角色显然是从数据库中获取的. is_granted()调用显然使用会话来查看用户具有的角色.我一直在玩弄和改变角色,而忘记注销并重新出现 – 难怪某些角色没有显示出来. 在登录和登出不同的角色后,我可以确认一切正常. 如果我没有休息,今天早上回来,我可能已经在圈中追赶了几个小时;那里有一个教训. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |