Symfony2在删除用户时删除acl

时间:2014-03-13 09:27:38

标签: symfony acl

我希望删除与给定用户相关的所有acl。我发现了一个有趣的出版物,解释了如何做到这一点https://groups.google.com/forum/#!topic/symfony2/mGTXlTWiMs8/discussion但这不能很好地清理。

删除与acl_entries和acl_security_identites匹配的条目,并保留acl_object_identities。我查看了我的AclProvider.php,了解如何仅通过sid(安全身份)删除对象身份,但我什么也没找到。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

现在这已经很老了,但我认为为了最终得到一个答案我会放弃我的两分钱。

实际上非常简单,正如Symfony的文档中所述,您只需删除SecurityIdentity,级联规则将确保ACE也将被删除。

所以最简单的方法是在服务中注入aclProvider:

core.services.userListener:
    class: acme\acmeBundle\Listener\UserListener
    arguments: ["@security.acl.provider"]
    tags:
        - { name: doctrine.orm.entity_listener, lazy: true }

然后您的服务将如下所示:

<?php
namespace acme\acmeBundle\Listener;

use Symfony\Component\Security\Acl\Dbal\MutableAclProvider,
    Symfony\Component\Security\Acl\Domain\UserSecurityIdentity;
use Doctrine\ORM\Event\LifecycleEventArgs;
use acme\acmeBundle\Entity\User;

class UserListener 
{
    protected $aclProvider;

    public function __construct( MutableAclProvider $aclProvider ){
        $this->aclProvider = $aclProvider;
    }

    public function postRemove( User $user, LifecycleEventArgs $event ) {     
        $securityId = UserSecurityIdentity::fromAccount($user);
        $this->aclProvider->deleteSecurityIdentity( $securityId );
    }
}

现在,当您删除用户时,SecurityIdentity将被删除,并且所有ACE都会被删除。

答案 1 :(得分:0)