我遵循this instruction创建一个@userAware
批注,该批注自动将对特定实体的所有查询限制为当前用户。
例如$todoRepo->findByTag("someTag")
会自动将WHERE user_id = 123
添加到结果查询中,以确保只能访问当前用户(id 123)的ToDo
个实体。
这很好用,但有一个很大的缺点:例如,如果管理员想知道有多少ToDo
个实体使用标签someTag
,他只会找到自己的实体...
由于使用@userAware
注释似乎很常见,所以我想知道是否有关于在特定查询上禁用/跳过/覆盖此过滤器/注释的最佳实践。
答案 0 :(得分:1)
您可以禁用过滤器。在您的示例中,您必须更改内核请求事件,例如...
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);
}
}
}