2015-09-03 51 views
2

在我的Symfony2項目中,我設法在官方文檔中設置了FOSUserBundle + SonataUserBundle + SonataAdminBundle。現在來設置ACL(訪問控制列表)。ACL + SonataAdminBundle + SonataUserBundle

我所做的:

  • 創建了一個名爲AdminReport的AdminClass

  • 應用程序/控制檯奏鳴曲:管理員:設置的ACL

    install ACL for sonata.admin.report 
    update role: ROLE_SONATA_ADMIN_REPORT_GUEST, permissions: ["LIST"] 
    update role: ROLE_SONATA_ADMIN_REPORT_STAFF, permissions: ["LIST","CREATE"] 
    update role: ROLE_SONATA_ADMIN_REPORT_EDITOR, permissions: ["OPERATOR","EXPORT"]
    • 創建新用戶,授予他與ROLE_SONATA_ADMIN_REPORT_STAFF
    • ap P /控制檯奏鳴曲:管理員:生成對象的ACL
    • 在登錄時該用戶和訪問默認/管理/儀表板

    包含AdminReport應該出現的塊,但它不是...我失蹤什麼?

這裏是我的config.yml

sonata_admin: 
    security: 
     handler: sonata.admin.security.handler.acl 
      information: 
       GUEST: [VIEW, LIST] 
       STAFF: [EDIT, LIST, CREATE] 
       EDITOR: [OPERATOR, EXPORT] 
       ADMIN: [MASTER] 
      admin_permissions: [CREATE, LIST, DELETE, UNDELETE, EXPORT, OPERATOR, MASTER] 
      object_permissions: [VIEW, EDIT, DELETE, UNDELETE, OPERATOR, MASTER, OWNER]

編輯 我試圖與該用戶直接訪問app_dev.php /管理/應用程序/報告/列表,Symfony的拋出拒絕訪問錯誤。日誌說

DEBUG-訪問被拒絕,用戶既不是匿名的,也不記得我。 如果我訪問app_dev.php/admin/app/report/list,它的工作原理!

於是,我就從

sonata.admin.security.handler.acl
處理程序更改爲
sonata.admin.security.handler.roles

它的工作原理,因爲我可以看到在管理儀表板塊。我也嘗試將

access_decision_manager: 
     strategy: unanimous 
更改爲
affirmative
,但它不起作用...

我絕對錯過了某些東西,但在哪裏?

+0

呀這裏同樣的問題,我工作的實際。當我已經解決了這個問題,我給你一個解決方案:) –

+0

你從你的研究提供新的信息?我完全堅持這一... –

+0

我做了周圍的一些調整和得到的東西的功能,我已經離開幾分鐘時,我會寫一個答案:) –

回答

0

那麼,經過一些調整後,我實現了它的工作。

首先,在應用我 'sonata.yml'/配置/我已經改變了燙髮類似如下:

應用程序/配置/ sonata.yml

sonata_admin: 
    security: 
     handler: sonata.admin.security.handler.acl 

     # acl security information 
     information: 
      # GUEST: [VIEW, LIST] 
      # STAFF: [EDIT, LIST, CREATE] 
      # EDITOR: [OPERATOR, EXPORT] 
      # ADMIN: [MASTER] 
      EDIT: EDIT 
      LIST: LIST 
      CREATE: CREATE 
      VIEW: VIEW 
      DELETE: DELETE 
      EXPORT: EXPORT 
      MASTER: MASTER 

爲了避免這種情況...

調試 - 拒絕訪問,用戶既不是匿名的,也不記得 - 我

...我已經評論了以下內容,因爲我認爲防火牆選民會阻止訪問我的用戶。也許不是明智的解決方案,但現在運行良好:)

應用程序/配置/ security.yml:我的應用程序大約只有管理員dahboard內置

# set access_strategy to unanimous, else you may have unexpected behaviors 
# access_decision_manager: 
#  strategy: unanimous 

通知,所以每個用戶需要在創建時訪問儀表板。 這樣一來,我已經修改了我用戶構造是這樣的:

的src /應用/索納塔/ UserBundle /實體/ user.php的

class User extends BaseUser 
{ 
    /** 
    * @var integer $id 
    */ 
    protected $id; 

    public function __construct() { 
     parent::__construct(); 
     // your own logic 
     $this->roles = array('ROLE_USER', 'ROLE_SONATA_ADMIN', 'ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT'); 
    } 

    /** 
    * Get id 
    * 
    * @return integer $id 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 
} 

編輯:看來,不知道它,我回答你的另一個問題^^「How can I assign default role to user in Symfony2

現在,每個用戶都可以訪問儀表板,但是像您的問題一樣,他們看不到任何東西。

我需要使用ACL,但像角色我的用戶屬於誰都有自己的ACL組。

一旦我的用戶屬於一個或多個組,他除了自己的權限得到了組的權限。

通過管理一個組的權限,屬於該組的每個用戶都擁有自己的權限進行修改。通過編輯用戶的權限,我可以讓它訪問一些組不允許的頁面。

例如:

     ┌─────────────┐ 
         │ GROUP_1 │     ┌───────────────┐ 
         ├─────────────┤     │  USER_1 │ 
         │ CAT2_VIEW │     │ applied perms │ 
         │ CAT2_LIST │     ├───────────────┤ 
         │ CAT2_EDIT │     │ CAT1_VIEW  │ 
         │ CAT2_DELETE │     │ CAT1_LIST  │ 
         ├─────────────┤     ├───────────────┤ 
         │ CAT3_VIEW │ ├────┐   │ CAT2_VIEW  │ 
┌─────────────┐   │ CAT3_LIST │  │   │ CAT2_LIST  │ 
│ USER_A │   │ CAT3_EDIT │  │   │ CAT2_EDIT  │ 
├─────────────┤<────────┤ CAT3_DELETE │  │   │ CAT2_DELETE │ 
│ CAT1_VIEW │   └─────────────┘  │   ├───────────────┤ 
│ CAT1_LIST │        ├────> │ CAT3_VIEW  │ 
│    │   ┌─────────────┐  │   │ CAT3_LIST  │ 
│    │<────────┤ GROUP_2 │  │   │ CAT3_EDIT  │ 
└─────────────┘   ├─────────────┤  │   │ CAT3_DELETE │ 
         │ CAT4_VIEW │  │   ├───────────────┤ 
         │ CAT4_LIST │  │   │ CAT4_VIEW  │ 
         │ CAT4_EDIT │ ├────┘   │ CAT4_LIST  │ 
         │ CAT4_DELETE │     │ CAT4_EDIT  │ 
         │ CAT4_EXPORT │     │ CAT4_DELETE │ 
         └─────────────┘     │ CAT4_EXPORT │ 
                 └───────────────┘ 

我設法讓這種方式工作,就像我想,但我不知道這是你的問題的最佳解決方案。 我希望這將幫助你:)

PS:如果有人看到任何錯誤或任何不合邏輯的事情,不要猶豫,告訴我的評論,我還在學習使用它,它會有用:)

0

SonataAdminBundle的PermissionMap擴展的Symfony的BasicPermissionMap。只有當您更改此默認配置時,AclVoter才支持「LIST」和「EXPORT」屬性,並可能投票授予想要的權限。

parameters: 
    security.acl.permission.map.class: Sonata\AdminBundle\Security\Acl\Permission\AdminPermissionMap 

見我的回答AclVoter denies access to 'LIST'