Symfony - 只访问他们自己的客户
Symfony - Acces only to their own customers
我有这些实体
User
(ManyToMany)
Customer (OneToOne --> a customer can have a related customer)
我的应用程序有效。现在我想管理权限。
当用户登录时,我只想显示与他相关的客户和与儿童客户相关的客户。
例如,
每次我使用 findAll(),它都会找到它的客户。
路由/user/4/customer/7:如果客户7与用户无关,权限被拒绝
我想我必须覆盖 Doctrine Repository 或使用 EntityManagerDecorator
我只是问什么是计算它的最佳实践?
谢谢!
基本上,像搜索特定数据这样的操作应该委托给存储库。最终,如果您必须搜索不同的数据源,您可以为此特定职责创建一个服务并注入所需的依赖项。在你的情况下,我会说你不需要 ovveride 任何东西,只需创建一个 UserRepository 并在那里编写一个函数来满足你的需要。
你为什么不在你的 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();
}
终于找到更好的方法了
原则过滤器
在内核上监听请求,如果涉及我的实体,应用我的过滤器(添加 WHERE id= xx)
我用这个:
http://blog.michaelperrin.fr/2014/12/05/doctrine-filters/
我有这些实体
User
(ManyToMany)
Customer (OneToOne --> a customer can have a related customer)
我的应用程序有效。现在我想管理权限。 当用户登录时,我只想显示与他相关的客户和与儿童客户相关的客户。
例如,
每次我使用 findAll(),它都会找到它的客户。
路由/user/4/customer/7:如果客户7与用户无关,权限被拒绝
我想我必须覆盖 Doctrine Repository 或使用 EntityManagerDecorator 我只是问什么是计算它的最佳实践? 谢谢!
基本上,像搜索特定数据这样的操作应该委托给存储库。最终,如果您必须搜索不同的数据源,您可以为此特定职责创建一个服务并注入所需的依赖项。在你的情况下,我会说你不需要 ovveride 任何东西,只需创建一个 UserRepository 并在那里编写一个函数来满足你的需要。
你为什么不在你的 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();
}
终于找到更好的方法了
原则过滤器
在内核上监听请求,如果涉及我的实体,应用我的过滤器(添加 WHERE id= xx)
我用这个: http://blog.michaelperrin.fr/2014/12/05/doctrine-filters/