2012-04-23 102 views
7

我從官方Symfony2 doc on Security中看到,除了「經典」角色(即ROLE_USER,ROLE_ADMIN等)之外,還可以定義新角色。如何在Symfony2中創建並註冊新角色

我如何定義新角色,爲了在security.yml創建角色層次他們註冊到我的Symfony2的應用程序?

對不起,打擾了你們所有人!我認爲答案很簡單。實際上,通過ROLE_開始使用新角色似乎已經足夠了。 例如,可以說ROLE_NEWS_AUTHOR只允許具有該角色的人能夠在網站中插入新聞。

謝謝。

回答

13

當然,你可以簡單地添加開始ROLE_SOMEROLE.In security.yml文件中的任何角色有兩個主要部分1.limit訪問2.誰是承包商,客人可以訪問

一個。 access_control:限制模式並指定可以訪問的角色。 b。 role_hierarchy:這裏是角色的層次結構,對於下面的例子,一個Admin用戶(ROLE_ADMIN)具有角色ROLE_USER,ROLE_NEWS_AUTHOR。因此,他可以訪問USER和NEWS_AUTHOR的所有頁面。無論您可以提供哪種層次結構。

access_control: 
     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }/login any one can access this pattern 
     - { path: ^/admin/, roles: ROLE_ADMIN }//block all pattern /admin/anything* 
     - { path: ^/news/, roles: ROLE_NEWS_AUTHOR } //block all pattern /news/anything* 
role_hierarchy: 
     ROLE_ADMIN: [ROLE_USER,ROLE_NEWS_AUTHOR] 

在你的控制器,你可以檢查的作用,

if(TRUE ===$this->get('security.context')->isGranted('ROLE_ADMIN')) 
{ 
    // do something related to ADMIN 
} 
else if(TRUE ===$this->get('security.context')->isGranted('ROLE_NEWS_AUTHOR')) 
{ 
    // do something related to News Editor 
} 

希望這有助於你。 有趣的編碼。

+0

感謝您的額外信息。 – JeanValjean 2012-04-23 11:47:28

+0

另請注意,角色名稱應始終以「ROLE_」開頭或Symfony無法識別它們。 – DarksteelPenguin 2016-05-31 09:03:24