只要我将sonata_admin.security.handler
设置为sonata.admin.security.handler.acl
,唯一有权访问的用户就是拥有ROLE_SUPER_ADMIN的用户。
我认为我把一切都配置好了,显然不是。
我试过了:
ROLE_VIP_CONTACT_ADMIN
,而不是由fos_group分配,但没有成功。security.access_decision_manager.strategy
的所有选项:肯定,共识和一致没有成功。
# 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相同。
答案 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. Security和Documentation » 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