Symfony2错误ObjectIdentity已与ACL关联

时间:2015-07-08 18:34:23

标签: symfony acl

我在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;

找到1条记录: 580 75商店1

这是代码

自定义ACL创建者(将所有现有ACL重置为默认值)

//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);

FindOrCreateAcl函数

    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;
}

这里没什么特别的,事实上效果很好,除了一台失败的机器;它必须是某些表上的某些缺失或不匹配的记录,但我无法确定在哪里。

有人有提示或线索吗?

提前谢谢

0 个答案:

没有答案