我希望删除与给定用户相关的所有acl。我发现了一个有趣的出版物,解释了如何做到这一点https://groups.google.com/forum/#!topic/symfony2/mGTXlTWiMs8/discussion但这不能很好地清理。
删除与acl_entries和acl_security_identites匹配的条目,并保留acl_object_identities。我查看了我的AclProvider.php,了解如何仅通过sid(安全身份)删除对象身份,但我什么也没找到。
有什么想法吗?
答案 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)