我按照this instruction创建了一个@userAware
注释,它自动将对特定实体的所有查询限制为当前用户。
例如,$todoRepo->findByTag("someTag")
会自动将WHERE user_id = 123
添加到生成的查询中,以确保只能访问当前用户(id 123)的ToDo
实体。
这很好但有一个很大的缺点:例如,如果管理员知道有多少ToDo
实体使用标签someTag
他只会找到自己的实体...
由于使用@userAware
注释似乎很常见,我想知道是否有关于如何在特定查询上禁用/绕过/覆盖此过滤器/注释的最佳实践。
您可以禁用过滤器。在您的示例中,您必须更改内核请求事件,就像那样......
public function onKernelRequest()
{
if ($user = $this->getUser()) {
if ($user->isAdmin() /* or whatever */) {
$this->em->getFilters()->disable('user_filter');
} else {
$filter = $this->em->getFilters()->enable('user_filter');
$filter->setParameter('id', $user->getId());
$filter->setAnnotationReader($this->reader);
}
}
}