原则 2 全局生命周期事件(简单 ACL)



我正在尝试在我的Symfony2应用程序中实现一些基本的ACL,并确保用户只访问他们被允许访问的实体,我创建了一个接口(UserAware)和一个原则过滤器,将"entity_table.user_id=SESSION_USERID"子句附加到查询中。

这非常有效,但后来我意识到,如果我能够设置 UserAware 接口持久化的所有实体的用户对象,那么除了将接口添加到实体之外,我就不必担心自己添加用户对象。

是否可以像使用全局生命周期 onflush 事件之类的单个过滤器一样简单地执行此操作,或者我是否必须向所有实体添加生命周期事件?

是的,可以全局添加侦听器。

首先创建一个侦听器(此示例侦听 PreUpdate 事件):

use DoctrineCommonPersistenceEventLifecycleEventArgs;
class MyEventListener
{
    public function preUpdate(LifecycleEventArgs $args)
    {
        $entity = $args->getObject();
        $entityManager = $args->getObjectManager();
        // do what you want to do...
    }
}

然后注册您的侦听器。

您可以在创建实体管理器之前执行此操作:

$eventManager = new DoctrineCommonEventManager();
$eventManager->addEventListener(array(DoctrineORMEvents::preUpdate), new MyEventListener());
$entityManager = DoctrineORMEntityManager::create($dbOpts, $config, $eventManager);

或者在创建后:

$eventManager = $entityManager->getEventManager();
$eventManager->addEventListener(array(DoctrineORMEvents::preUpdate), new MyEventListener());

在文档中阅读有关生命周期事件的更多信息。

相关内容

  • 没有找到相关文章

最新更新