简体   繁体   English

如何使用 symfony doctrine 中的查询生成器获取针对权限联结表的文档检查?

[英]How to get documents checking against a permissions junction table with query builder in symfony doctrine?

I'm curious how to build a doctrine query with query builder in Symfony which can exclude items based on a fairly standardized permissions junction table.我很好奇如何使用 Symfony 中的查询生成器构建 doctrine 查询,它可以根据相当标准化的权限联结表排除项目。

In my case,就我而言,

User entity User实体

Template entity Template实体

userTemplatePermissionTable

In userTemplatePermissions Entity, we have the following properties:在 userTemplatePermissions 实体中,我们有以下属性:

userToCheck , template , read , write , delete userToCheck , template , read , write , delete

And I'd like something the equivalent of:我想要的东西相当于:

return $this->createQueryBuilder('t')
[where count of t.userDocumentPermissions > 0
  where canRead = true, canWrite = true, canDelete = true
AND userDocumentpermissions.user = :user]

This ended up being a fairly simple setup of left joins and exclusion checks, I wound up with the following in my TemplateRespository.php这最终是一个相当简单的左连接和排除检查设置,我在我的TemplateRespository.php中完成了以下操作

public function findUserAuthorized($user, $read = null, $write = null, $delete = null)
{
    $query = $this->createQueryBuilder('t')
    ->leftJoin('t.userTemplatePermissions', 'utp')
    ->where('utp.userToCheck = :user')
    ->setParameter('user',$user);

    if ($read !== null) {
        $query->andWhere('utp.read = :read')
        ->setParameter('read',$read);
    }
    if ($write !== null) {
        $query->andWhere('utp.write = :write')
        ->setParameter('write',$write);
    }
    if ($delete !== null) {
        $query->andWhere('utp.delete = :delete')
        ->setParameter('delete',$delete);
    }
    return $query->getQuery()->getResult();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM