AclVoter拒绝访问' LIST'

时间:2016-11-07 10:29:54

标签: symfony permissions fosuserbundle sonata-admin permission-denied

只要我将sonata_admin.security.handler设置为sonata.admin.security.handler.acl,唯一有权访问的用户就是拥有ROLE_SUPER_ADMIN的用户。 我认为我把一切都配置好了,显然不是。

我试过了:

  • 为用户提供真正的角色ROLE_VIP_CONTACT_ADMIN,而不是由fos_group分配,但没有成功。
  • security.access_decision_manager.strategy的所有选项:肯定,共识和一致
  • 删除所有acl表,acl:init,sonata:admin:setup-acl,有和没有奏鸣曲:admin:generate-object-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。

/ edit:问题与ACL + SonataAdminBundle + SonataUserBundle相同。

2 个答案:

答案 0 :(得分:0)

经过数小时的调试,结果是让ACL通过使用Sonata的AdminPermissionMap了解import pylab as PL import matplotlib.pyplot as plt import numpy as np import numpy.ma as ma def draw(): plt.cla() #use_cmap = PL.cm.binary #use_cmap = PL.cm.seismic #use_cmap = PL.cm.PuBu config = np.array([range(0,5), range(3,8), range(5,10) ]) t = [True]*5 f = [False]*5 blue_mask = [True]*5 #print "\tblue_mask = t\n{0}".format(blue_mask) blue_mask.extend(f) #print "\tblue_mask.extend(f)\n{0}".format(blue_mask) blue_mask.extend(t) #print "\tblue_mask.extend(t)\n{0}".format(blue_mask) blue_mask = ma.masked_array(config, blue_mask) orange_mask = [False]*5 orange_mask.extend(t) orange_mask.extend(f) orange_mask = ma.masked_array(config, orange_mask) print "blue mask:\n{0}".format(blue_mask) print "\norange_mask:\n{0}".format(orange_mask) plt.pcolor(blue_mask, vmin = 0, vmax = 10 - 1, cmap = 'Blues') #'Oranges' plt.pcolor(orange_mask, vmin = 0, vmax = 10 - 1, cmap = 'Oranges') #'Oranges' plt.axis('image') plt.title('t = sometime' ) plt.show() draw() 权限。 请参阅SonataAdminBundle 5. SecurityDocumentation » Admin(Ctrl + F:security.acl.permission.map.class)

LIST

你可能已经知道了。

总而言之:配置不仅可以通过编写一些配置文件来完成,还可以导入正确的配置文件。

答案 1 :(得分:0)

在Symphony&gt; 3.1上你应该使用它:

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

代替

  

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