我在SO中搜索过,但是我找不到有效的答案,事实上很少有关于此错误的问题,答案更少。 所以这是我的问题:我在应用程序中有一个页面,管理员可以通过该页面将ACL重置为默认值。 到目前为止,它一直在单个机器上正常工作,当它试图在Store实体上为Admin创建权限时,它会抛出错误'ObjectIdentity已经与ACL关联'。 问题似乎是AclProvider-> findAcl()函数找不到Store实体类的任何acl记录(即使在acl_classes和object_identities都有),所以它用于创建一个新的,然后失败因为,正如错误所说,该对象已经有一个acl记录。
如果我直接在db上搜索
SELECT * FROM acl_classes where class_type = 'Espresso2\\PimBundle\\Entity\\Store';
找到1条记录:
75 Espresso2 \ PimBundle \ Entity \ Store
SELECT * FROM acl_object_identities where class_id=75;
这是代码
//All permissions to ROLE_ADMIN on Store objects
$aclProvider = $this->service_container->get('security.acl.provider');
$objectIdentity = new ObjectIdentity('store', 'Espresso2\\PimBundle\\Entity\\Store');
$acl = $this->pimacl->findOrCreateAcl($objectIdentity, 1);
public function findOrCreateAcl($objectIdentity,$reset=0){
$aclProvider = $this->service_container->get('security.acl.provider');
$acl=null;
try{
$acl=$aclProvider->findAcl($objectIdentity);
}catch(AclNotFoundException $e){
$acl = $aclProvider->createAcl($objectIdentity);
}
if($reset==1){
$acl=$this->deleteOldClassAcl($acl);
}
return $acl;
}
这里没什么特别的,事实上效果很好,除了一台失败的机器;它必须是某些表上的某些缺失或不匹配的记录,但我无法确定在哪里。
有人有提示或线索吗?
提前谢谢
马