2014-10-09 58 views
1

我目前的系統上使用工作symfony的(與FOSUserBundle),和我有role_hierarchy,我想利用繼承中的多個角色。Symfony的用戶角色繼承

我的role_hierarchy:

role_hierarchy: 
    ROLE_MEMBER:  ROLE_USER 
    ROLE_MONITOR: ROLE_MEMBER 
    ROLE_SUPERVISOR: ROLE_MONITOR 
    ROLE_MANAGER:  ROLE_SUPERVISOR 
    ROLE_ADMIN:  ROLE_MEMBER 
    ROLE_SUPER_ADMIN: [ROLE_MANAGER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

如果用戶我登錄作爲具有ROLE_SUPERVISOR和我打電話:

$this->get('security.context')->isGranted('ROLE_MONITOR') 

我希望它可以返回true,但它目前的回報假。

無需添加每一個角色給每個用戶,纔有可能繼承的角色,這樣,如果我叫isGranted,它會檢查所有其他「相關角色」層次結構中?如果是這樣,怎麼樣?

+0

做任何角色目前的工作?隨着SUPERVISOR用戶,不'$這個 - >獲取( 'security.context') - > isGranted( 'ROLE_SUPERVISOR')'返回true?如果沒有,這不是層次結構的問題,而是你如何配置每個用戶的角色。 – Sehael 2014-10-09 21:23:59

回答

1

你需要把[]在你的角色。這符合我的預期:

role_hierarchy: 
    ROLE_USER:   [] 
    ROLE_STAFF:   [ROLE_USER] 

    ROLE_SCORE_ENTRY: [ROLE_USER, ROLE_STAFF] 
    ROLE_SCORE_ADMIN: [ROLE_USER, ROLE_STAFF, ROLE_SCORE_ENTRY] 

    ROLE_ASSIGNOR:  [ROLE_STAFF] 
    ROLE_ASSIGNOR_KAC: [ROLE_ASSIGNOR] 
    ROLE_ASSIGNOR_CORE: [ROLE_ASSIGNOR] 
    ROLE_ASSIGNOR_EXTRA: [ROLE_ASSIGNOR] 

    ROLE_ASSIGNOR_ADMIN: 
     - ROLE_ASSIGNOR 
     - ROLE_ASSIGNOR_KAC 
     - ROLE_ASSIGNOR_CORE 
     - ROLE_ASSIGNOR_EXTRA 

    ROLE_DEVELOPER: [ROLE_USER] 

    ROLE_ADMIN:  
     - ROLE_STAFF 
     - ROLE_ASSIGNOR_ADMIN 
     - ROLE_SCORE_ADMIN 
     - ROLE_ALLOWED_TO_SWITCH 

    ROLE_SUPER_ADMIN: 
     - ROLE_ADMIN 
     - ROLE_DEVELOPER 
     - ROLE_ALLOWED_TO_SWITCH 
+0

爲繼承一個角色,你並不需要的陣列。 [該文檔(http://symfony.com/doc/current/book/security.html#hierarchical-roles)示出了這樣的一個例子。 – Sehael 2014-10-09 21:25:56