2013-06-12 9 views
6

ユーザーが 'VIEW_GEOLOC_DATA'ロールを持っているかどうか知りたいですが、twig関数is_granted()を使って問題があります。Twig/Symfony2:is_grantedを持つ複数のロール

私はテンプレートで使用する場合:

Roles : {{ dump(app.user.getRoles()) }} 
is_granted('ROLE_SUPER_ADMIN') : {{ dump(is_granted('ROLE_SUPER_ADMIN')) }} 
is_granted('VIEW_GEOLOC_DATA') : {{ dump(is_granted('VIEW_GEOLOC_DATA')) }} 

これは、レンダリング時に私が得るものです:

array(2) { 
    [0]=> 
    string(16) "ROLE_SUPER_ADMIN" 
    [1]=> 
    string(16) "VIEW_GEOLOC_DATA" 
} 
is_granted('ROLE_SUPER_ADMIN') : bool(true) 
is_granted('VIEW_GEOLOC_DATA') : bool(false) 

私はsymfonyのキャッシュを空にしてログアウトしようとしました。
は、私も自分のユーザの()メソッドのgetRolesから返される配列の役割の順序を切り替えることを試みた:is_granted機能のみを使用すると、処理するために、Symfony2のを期待している場合は、アカウントに配列

答えて

8

は私Userクラスに新しいメソッドhasRoleを作成することになった

{% if app.user.hasRole('ROLE_VIEW_GEOLOC_DATA') %} 
    {# do something #} 
{% endif %} 

EDIT: として@ JonnySは、で作業するには、ロールがROLE_で始まる可能性があります210 Symfonyの機能。テストされませんでした。

+6

明瞭にするために、if/else: 'return in_array($ role、$ this-> getRoles());を追加するのではなく、in_arrayの結果を直接返す可能性があります。 –

+1

ROLE継承のis_grantedアカウント、ユーザーが指定された役割を持っているかどうかを確認するだけでは – Gamesh

8

の最初の役割がかかりますあなたの役割は "ROLE_"で始まる必要があります。

変更

'VIEW_GEOLOC_DATA' 

もちろん
'ROLE_VIEW_GEOLOC_DATA' 

に、あなたはあなたの設定でこれを変更し、新しい役割を追加する必要があります。

専用の役割クラスを使用している場合、この回答は適用されません。テンプレートには、私が使用し、

public function hasRole($role) 
{ 
    return in_array($role, $this->getRoles()); 
} 

その後:

+0

が、これはgetRolesの私の定義は()である: 'パブリック関数getRoles() { 場合(の$ this - >役割== 100)の戻り配列( 'ROLE_SUPER_ADMIN'、 'VIEW_GEOLOC_DATA'); } ' しかし、この動作は[データベースの役割の管理](http://symfony.com/doc/2.1/cookbook/security/entity_provider.html#managing-roles-in-the-database)と同じです。 –

+2

これを変更して 'ROLE_'プレフィックスを使用してください。 Symfony 2はプレフィックスのないロールを好きではありません。ドキュメントから、 "すべてのロールは、Symfony2によって管理されるROLE_プレフィックスで始まる必要があります。" http://symfony.com/doc/2.1/book/security.html幸運とそれが動作するかどうか教えてください。 – JonnyS

+0

それは何も変わりません –