2013-06-12 5 views
6

사용자에게 'VIEW_GEOLOC_DATA'역할이 있는지 알고 싶지만 나뭇 가지 기능 is_granted()을 사용하는 데 문제가 있습니다.Twig/Symfony2 : is_granted가있는 역할 배수

내가 템플릿에서 사용하는 경우 :

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) 

내가 심포니의 캐시를 비우는과 로그 아웃을 시도했다 :

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')) }} 

이 렌더링 할 때 내가 무엇을 얻을 수 있습니다.
나는 또한 내 사용자의() 메소드 getRoles에 의해 반환되는 배열에 역할의 순서를 전환하려고 : is_granted 기능은 당신이 처리 할 수 ​​Symfony2를 기대하는 경우 계정에 배열

답변

8

내가 내 User 클래스에 새로운 방법 hasRole을 만들어 결국

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

편집 : 로 @ JonnyS는과 작업하려면 ROLE_으로 시작해야한다고 생각할 수 있습니다. ..210 Symfony의 기능. 테스트하지 않았어.

+6

명확성의 문제로 if/else를 추가하는 대신 in_array의 결과를 직접 반환 할 수 있습니다. –

+1

ROLE 상속을위한 is_granted 계정이 아닌 경우 (예 : $ this-> getRoles()) , 사용자가 지정된 역할을하는지 확인하는 동안 – 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

변경된 사항 없음 –