![](/img/trans.png)
[英]Symfony4/Twig - is_granted() only checks first role in an array of roles
[英]Symfony2 roles/groups - is_granted is not detecting roles that the user has
我遵循Symfony2烹飪手冊(http://symfony.com/doc/current/cookbook/security/entity_provider.html)中的“如何從數據庫(實體提供者)加載安全用戶”食譜,但我不使用自定義實體提供程序-這意味着我的User類正在為角色使用延遲加載。
安全性中的防火牆/訪問控制一切正常。 我有一些僅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()
調用顯然使用該會話來查看用戶具有哪些角色。 我一直在玩耍並更換角色,卻忘記了注銷並再次登錄-難怪某些角色沒有出現。
登錄和注銷並使用不同的角色后,我可以確認一切正常。
如果我不休息片刻再回到今天早上,那我可能已經在圈子里追逐自己幾個小時了。 那里有一個教訓要學習。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.