【问题标题】:How to remove all associated security entries when deleting object in Symfony?在 Symfony 中删除对象时如何删除所有关联的安全条目?
【发布时间】:2025-12-14 11:15:01
【问题描述】:

我正在做一个简单的任务管理器项目,我使用 Symfony 的内置 ACL 系统来处理对我的域对象(任务)的访问。 Symfony 文档here 中描述了授予用户对特定对象的访问权限并检查用户是否有权对对象执行任何操作的过程,但我找不到有关如何在删除对象时分离与对象关联的 ACL 条目的任何信息目的。现在,当我删除一个对象时(我还没有为此创建一个控制器,并直接在 phpmyadmin 中执行它)中的条目 与之相关的acl_object_identitiesacl_entries 保持不变,但显然它们也应该下降。我如何做到这一点?

【问题讨论】:

    标签: php symfony acl


    【解决方案1】:

    如果有人在这里遇到类似的麻烦,我在深入研究 Symfony 类 api 参考后最终如何解决它:

        //...
        $em->remove($task);
    
        //retrieving object's Object Identity
        $strat = new ObjectIdentityRetrievalStrategy();
        $taskObjectIdentity = $strat->getObjectIdentity($task);
    
        $aclProvider = $this->get('security.acl.provider');
        $aclProvider->deleteAcl($taskObjectIdentity);
    
        $em->flush();
    

    【讨论】: