トリッキーなクエリの問題があります。このコードを使用して、ユーザーがアクセスできるコンテナーを抽出します (多対多の関係で定義されたアクセス)。
//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 では、このようなレベルで掘り下げることはできませんね。