0

只要我將sonata_admin.security.handler設置爲sonata.admin.security.handler.acl,唯一有權訪問的用戶就是具有ROLE_SUPER_ADMIN的用戶。 我認爲我配置一切正常,顯然不是。AclVoter拒絕訪問'LIST'

我想:

  • 給用戶真正發揮作用,而不是ROLE_VIP_CONTACT_ADMIN由一個fos_group,沒有成功分配。
  • security.access_decision_manager.strategy所有選項:肯定的,共識和一致
  • 刪除所有ACL表,ACL:初始化,奏鳴曲:管理員:設置的ACL,有和沒有奏鳴曲:管理員:生成對象的ACL和清除緩存每次。

沒有成功。

# Acme\MyBundle\Controller\CRUDController.php 

$securityContext->getAdminPermissions(); 
# -> ["CREATE", "LIST", "DELETE", "UNDELETE", "EXPORT", "OPERATOR", "MASTER"] 

dump($this->admin->getSecurityInformation()); 
/* -> array:3 [▼ 
    "GUEST" => array:2 [▼ 
    0 => "VIEW" 
    1 => "LIST" 
    ] 
    "STAFF" => array:3 [▼ 
    0 => "EDIT" 
    1 => "LIST" 
    2 => "CREATE" 
    ] 
    "ADMIN" => array:3 [▼ 
    0 => "MASTER" 
    1 => "OPERATOR" 
    2 => "EXPORT" 
    ] 
] */ 

dump($this->getUser()->getRoles()); 
/* -> array:15 [▼ 
    0 => "ROLE_ADMIN" 
    1 => "ROLE_VIP_CONTACT_GUEST" 
    2 => "ROLE_VIP_CONTACT_STAFF" 
    3 => "ROLE_VIP_CONTACT_ADMIN" # <--- I gave him everything! 
    [...] 
    9 => "ROLE_ALLOWED_TO_SWITCH" 
    [...] 
    16 => "ROLE_USER" 
] */ 

現在我打開瀏覽器,進入app_dev.php/my-path-to/vip/contact/list,導致一個AccessDeniedException。

/編輯:這是同樣的問題,因爲這裏ACL + SonataAdminBundle + SonataUserBundle

回答

0

後調試的時間,其結果是讓ACL瞭解使用索納塔的AdminPermissionMap的LIST許可。 見SonataAdminBundle 5. SecurityDocumentation » Admin(按Ctrl + F:security.acl.permission.map.class)

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

你可能已經知道這一點。

爲了使長話短說:配置不僅寫了一些配置文件完成,但也導入正確的。

0

在交響曲> 3.1,你應該這樣做:

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

代替

參數: security.acl.permission.map.class:索納塔\ AdminBundle \安全\的Acl \權限\ AdminPermissionMap