簡體   English   中英

Symfony2角色/組-is_granted未檢測到用戶具有的角色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM