2012-04-17 5 views
11

Symfony2 cook book(http://symfony.com)から「データベース(エンティティプロバイダ)からセキュリティユーザを読み込む方法」に従ってきました。 /doc/current/cookbook/security/entity_provider.html)、私はカスタムエンティティプロバイダを使用していないことを除いて - つまり、私のUserクラスがロールに遅延ロードを使用していることを意味します。Symfony2のロール/グループ - is_grantedがユーザのロールを検出していない

セキュリティのファイアウォール/アクセス制御はすべて正常に機能します。 ROLE_ADMINユーザーだけがアクセスできるルートと、ROLE_USERユーザーがアクセスできるルートがあります。これらはうまくいきます。私のユーザーがデータベースにROLE_ADMINの役割を持っている(とそれに制限されたURLにアクセスできるにもかかわらず

<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> 

問題は、私の基本テンプレートでは、私は次のように表示されるバーを持っているということですロール)、「Admin area」リンクは表示されません!

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

それは正常に動作します:同じ形式で

は、私は、これは持っています!ユーザーが持っているすべての役割が表示されます!

私は間違っていますか?

遅延ロードは責任がありますか?

他にも問題はありません。

+1

これで、ユーザープロバイダの役割を熱心に読み込むとどうなりますか? – Cerad

答えて

18

私は答えを見つけました。私はそれがどれほど明白であるかを信じることができません。

app.userオブジェクト(つまり、2番目のスニペット)から取得されたユーザーの役割は、明らかに要求時にデータベースから取得されます。

is_granted()コールは明らかにセッションを使用して、ユーザーの役割を確認します。私は周りに遊んでいたし、ログアウトして忘れてしまった間に役割を変えていた - 特定の役割が表示されなかったのも不思議ではない。

さまざまな役割を使ってログインして遊んだ後、すべて正常に動作することを確認できます。

私は休憩を取っていないし、今朝戻ってきた場合、私は何時間もサークルで自分を追いかけるかもしれません。そこに学ぶべき教訓があります。

+0

あなたは私の一日を保存しました、ありがとう! – Moonchild

+0

これは、構成内およびコントローラー内のアクセス制御とファイアウォールで同じように機能することに注意してください。 –

+0

ありがとうございました!この問題はあまりにも愚かで正直ではありません。私はなぜ30分のようなことが起こっているのか理解できませんでした... – Cowwando

関連する問題