我有一个具有大量数据的项目。我需要根据用户角色/组/权限进行查询。这意味着像
这样的查询$fooRepository = $this->getDoctrine()
->getManager()
->getRepository(Foo::class)
->findAll();
如果由cole_super_admin或cool_user完成,则应返回不同的记录。另外,我需要根据关系过滤记录,依此类推。
我有不同的解决方案:
- 在存储库查询中注入用户角色
- 创建基于角色的存储库
- 为每个角色创建一个查询
在存储库查询中注入用户角色
在这种情况下,每个存储库应负责提供正确的数据。这是类似于此的解决方案。在该解决方案记录中,租户过滤。
创建基于角色的存储库
在这种情况下,我需要创建不同的存储库并以不同的方式实例化。但是我不认为这在学说上很容易吗?当我写作时,...我认为这是一个夸张的解决方案。
为每个角色创建查询
目前,我认为这是进行查询的更自然的方法。我只是想象存储库应包含
+ findAllStuffForGuestRole()
+ findAllStuffForAdminRole()
每次我需要添加查询时,都必须创建不同的查询。
我认为教义过滤器是解决问题的最干净,最简单的方法。请参阅文档
这实际上对Symfony/Doctrine非常简单。这是官方文档中的一个很棒的页面,它比我更好地解释它:http://symfony.com/doc/current/doctrine/repository.html