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