教条可以提供按用户角色,组或权限过滤的记录吗?

时间:2017-06-05 15:01:27

标签: symfony doctrine-orm

我有一个包含大量数据的项目。我需要根据用户角色/组/权限进行查询。这意味着像

这样的查询
$fooRepository = $this->getDoctrine()
    ->getManager()
    ->getRepository(Foo::class)
    ->findAll();
如果由ROLE_SUPER_ADMIN或ROLE_USER完成,

应返回不同的记录。另外,我需要根据关系等过滤记录。

我有不同的解决方案:

  • 在存储库查询中注入用户角色
  • 创建基于角色的存储库
  • 为每个角色创建一个查询

在存储库查询中注入用户角色

在这种情况下,每个存储库都应负责提供正确的数据。这是类似to this的解决方案。在该解决方案中,记录由租户过滤。

创建基于角色的存储库

在这种情况下,我需要创建不同的存储库并以不同方式实例化它们。但我不认为这在学说上很容易吗?在我写作的时候......我认为这是一个夸张的解决方案。

为每个角色创建查询

目前我认为这是更自然的查询方式。我只是想象一个存储库应该包含

+ findAllStuffForGuestRole()
+ findAllStuffForAdminRole()

每次我需要添加查询时,我必须创建不同的查询。

2 个答案:

答案 0 :(得分:1)

我认为Doctrine filters是解决问题的最简洁,最简单的方法。请参阅documentation

答案 1 :(得分:0)

这实际上与Symfony / Doctrine非常直接。这是官方文档中的一个很好的页面,它比我更好地解释了它:http://symfony.com/doc/current/doctrine/repository.html