2013-10-18 210 views
1

我目前正試圖圍繞Symfony安全性,尤其是ACL。我一直在閱讀各種文檔,對於ACL角色0​​權限似乎很重要。Symfony安全角色

但是,我不明白這些角色&權限是在哪裏定義的。例如。該文檔有一小部分角色[1],但在本示例中,ROLE_USER來自哪裏?此外,角色如何封裝權限,如在Symfony應用程序中角色&之間的這種關係定義的權限?

[1] http://symfony.com/doc/master/book/security.html#roles

回答

5

內置特殊角色(IS_AUTHENTICATED_FULLYIS_AUTHENTICATED_REMEMBEREDIS_AUTHENTICATED_ANONYMOUSLY)這裏定義:AuthenticatedVoter

您應該以層次結構的形式在app/config/security.yml中定義所有其他角色。例如:

security: 
    acl: 
     connection: default 
    # ... 
    role_hierarchy: 
     ROLE_SILVER: [ROLE_BRONZE] 
     ROLE_GOLD: [ROLE_SILVER] 
     ROLE_PLATINUM: [ROLE_GOLD] 
     ROLE_ADMIN: [ROLE_PLATINUM, ROLE_ALLOWED_TO_SWITCH] 

希望它可以幫助你。

更新#1: 它與Acl實施。您可以根據需要創建許多acl(例如Class,ClassField,Object)。 每AclDomain有一個或多個Entries這樣的:

Entry#1: User with 'ROLE_BRONZE' allow to 'VIEW' this `Domain` 
Entry#2: User with 'ROLE_SILVER' allow to 'EDIT' this `Domain` 

因此,與role_hierarchyROLE_SILVER允許EDITVIEWDomain根據。但ROLE_BRONZE只允許VIEW

在您的Controller中,您可以檢查權限。詳情請參閱example

UPDATE#2: 要授予某些權限,請使用MaskBuilder

+0

謝謝。但是,我仍然不明白角色如何與權限相關聯。例如。你聲明ROLE_BRONZE,就像在哪裏聲明ROLE_BRONZE的人實際上有能力做什麼? – Luke

+0

請參閱**更新#1 ** – sergekv