Symfony - 只能访问自己的客户

问题描述 投票:1回答:3

我有这些实体

User

(ManyToMany)

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

我的应用有效。现在我想管理权限。当用户登录时,我想只显示与他相关的客户以及与儿童客户相关的客户。

例如,

  • 每次我使用findAll(),它都会找到它的客户。
  • Route / user / 4 / customer / 7:如果客户7与用户无关,则拒绝权限

我想我必须覆盖Doctrine Repository或使用EntityManagerDecorator我只是想问一下最佳实践是什么?谢谢 !

symfony doctrine fosuserbundle
3个回答
1
投票

基本上,应该将搜索特定数据的操作委托给存储库。最终,如果您必须搜索不同的数据源,则可以为此特定响应创建服务,并注入所需的依赖项。在你的情况下,我会说你不需要任何东西只需创建一个UserRepository并在那里写一个功能,你可以做你需要的。

看看这个:https://symfony.com/doc/3.3/doctrine/repository.html


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();
}

0
投票

最后我找到了一个更好的方法。

主义过滤器

内核上的侦听请求,如果涉及我的实体,则应用我的过滤器(添加WHERE id = xx)

我用这个:http://blog.michaelperrin.fr/2014/12/05/doctrine-filters/

© www.soinside.com 2019 - 2024. All rights reserved.