Symfony-仅针对自己的客户

时间:2019-01-10 16:02:35

标签: symfony doctrine fosuserbundle

我有这些实体

User

(ManyToMany)

Customer (OneToOne --> a customer can have a related customer)

我的应用有效。现在我要管理权限。 登录用户后,我只想显示与他有关的客户和与孩子有关的客户。

例如,

  • 每次使用findAll()时,它将找到其客户。

  • 路由/ user / 4 / customer / 7:如果客户7与用户无关,则权限被拒绝

我认为我必须重写Doctrine Repository或使用EntityManagerDecorator 我只是想问问最佳实践是什么? 谢谢!

3 个答案:

答案 0 :(得分:1)

基本上,诸如搜索特定数据之类的操作应委托给存储库。最终,如果您必须搜索其他数据源,则可以为此特定责任创建服务,并注入所需的依赖项。在您的情况下,我会说您不需要做任何事情,只需创建UserRepository并在其中编写一个可以满足您需要的函数即可。

检查一下: https://symfony.com/doc/3.3/doctrine/repository.html

答案 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/