0

我有一个棘手的查询问题,我使用此代码来提取用户有权访问的容器(访问定义在多对多关系中):

    //Fetch the containers
    $repository = $this->getDoctrine()->getRepository('BizTVContainerManagementBundle:Container');
    $query = $repository->createQueryBuilder('c')
        ->innerJoin('c.users','u')
        ->where('c.company = :company')
        ->setParameter('company', $companyId)
        ->orderBy('c.name', 'ASC')
        ->getQuery();
    $containers = $query->getResult();

现在我实际上有 4 级权限的层次结构 - 公司、地理区域、建筑物和屏幕。我想设置它,以便当用户对父对象具有权限时,查询也返回子对象,而没有在子对象上设置任何特定权限。

如果我可以访问 symfony2 的优秀实体系统,我将能够放置类似的东西

If $entity->getParent() == granted
OR
$entity->getParent()->getParent() == granted
THEN
this is granted also

但是在 SQL 中,我无法深入挖掘这样的级别,可以吗?

4

1 回答 1

0

您可以在查询中提取完整的层次结构:

$query = $repository->createQueryBuilder('company')
    ->leftJoin('company.parent','geoarea')
    ->leftJoin('geoarea.parent','building')
    ->leftJoin('building.parent','screen')

我不清楚您是如何存储您的权限的,但在查询中您可以“或”一起使用 where 条件并检查层次结构中的每个项目。

于 2012-08-19T13:01:46.793 回答