我有这些实体
User
(ManyToMany)
Customer (OneToOne --> a customer can have a related customer)
我的应用有效。现在我要管理权限。 登录用户后,我只想显示与他有关的客户和与孩子有关的客户。
例如,
每次使用findAll()时,它将找到其客户。
路由/ user / 4 / customer / 7:如果客户7与用户无关,则权限被拒绝
我认为我必须重写Doctrine Repository或使用EntityManagerDecorator 我只是想问问最佳实践是什么? 谢谢!
答案 0 :(得分:1)
基本上,诸如搜索特定数据之类的操作应委托给存储库。最终,如果您必须搜索其他数据源,则可以为此特定责任创建服务,并注入所需的依赖项。在您的情况下,我会说您不需要做任何事情,只需创建UserRepository并在其中编写一个可以满足您需要的函数即可。
答案 1 :(得分:1)
为什么不在自己的customerRepository
中创建自己的自定义findAll()函数,以对用户进行过滤?
类似
public function findAllRelatedToUser(User $user)
{
return $this->createQueryBuilder('c')
->innerJoin('c.user', 'u')
->andWhere('u.id = :user_id')
->setParameter('user_id', $user->getId())
->getQuery()
->getResult();
}
答案 2 :(得分:0)
最后,我找到了一种更好的方法。
文档过滤器
关于内核的侦听请求,如果涉及到我的实体,请应用我的过滤器(添加WHERE id = xx)
我用这个: http://blog.michaelperrin.fr/2014/12/05/doctrine-filters/