Doctrine 2 - 根据ACL过滤加载的实体

时间:2012-01-18 03:44:23

标签: doctrine-orm acl

Doctrine 2中的事件监听器非常有用。我可以使用它们来有效地在实体创建,更新和删除上实施ACL。但是,我无法找到加载实体的方法。

postLoad事件在加载实体后触发,我可以检查事件监听器中的ACL,但是我该怎么办?我想静默地从结果集中删除具有ACL拒绝的实体,以便仅返回用户有权查看的实体。

在听众中我尝试了$entity = nullunset($entity),但它们都不起作用,因为UOW仍然拥有引用。我可以使用$entitymanager->detatch($entity),但只将其从实体管理器中删除,而不是销毁实体。

那么,有什么方法可以做我想做的事情吗?也许有不同的道路?

1 个答案:

答案 0 :(得分:3)

这样做的方法是使用学说过滤器。您可以在可以过滤的实体中存在一个字段,然后离开。无需postLoad事件监听器。见http://docs.doctrine-project.org/en/latest/reference/filters.html