用户如何在 EasyAdmin 中查看自己的产品,而管理员可以查看所有产品?

Posted

技术标签:

【中文标题】用户如何在 EasyAdmin 中查看自己的产品,而管理员可以查看所有产品?【英文标题】:How user can se own product in EasyAdmin but admin can se all products? 【发布时间】:2021-07-16 19:47:15 【问题描述】:

我在 Symfony 项目中使用 EasyAdmin 3,easyAdmin 的问题是,我有两个角色,角色管理员和角色艺术家。 我发现每个人都可以看到自己发布的产品是如何工作的,但我希望管理员查看每个人的所有产品, 我的意思是艺术家必须看到他们自己的产品,而管理员必须在easyadmin中看到每个人的产品?

如果有人伸出援手,我将不胜感激

<?php

namespace App\Controller\Admin;


use App\Entity\Product;

use Doctrine\ORM\QueryBuilder;


use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
use EasyCorp\Bundle\EasyAdminBundle\Field\SlugField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ImageField;
use EasyCorp\Bundle\EasyAdminBundle\Field\MoneyField;
use EasyCorp\Bundle\EasyAdminBundle\Field\BooleanField;
use EasyCorp\Bundle\EasyAdminBundle\Field\IntegerField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextEditorField;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;

class ProductCrudController extends AbstractCrudController

    public static function getEntityFqcn(): string
    
        return Product::class;
    

    public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder
    
        $user = $this->getUser()->getId();
        $qb = parent::createIndexQueryBuilder($searchDto, $entityDto, $fields, $filters);
        $qb->where('entity.user = :id');
        $qb->setParameter('id', $user);

        return $qb;
    

谢谢哈米德

【问题讨论】:

【参考方案1】:

根据用户角色,您必须在用户 ID 上添加或不添加 where 条件。 所以如果用户是管理员,不要添加where 条件。否则,添加where 条件。

测试用户角色,可以拨打$this-&gt;isGranted('ROLE_ADMIN')

应该是这样的:

public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder

    $user = $this->getUser()->getId();
    $qb = parent::createIndexQueryBuilder($searchDto, $entityDto, $fields, $filters);
    if (!$this->isGranted('ROLE_ADMIN')) 
       $qb->where('entity.user = :id');
       $qb->setParameter('id', $this->getUser()->getId());
    
    return $qb;

【讨论】:

这项工作非常好,非常感谢 Philippe :) 欢迎您,如果您能对我的回答竖起大拇指,那会让我开心:)

以上是关于用户如何在 EasyAdmin 中查看自己的产品,而管理员可以查看所有产品?的主要内容,如果未能解决你的问题,请参考以下文章

EasyAdmin 3:限制登录用户的数据仍然在表单下拉列表中显示其他数据

easyadmin写入无效

功能测试 EasyAdmin 3 后端

easyadmin crud 控制器:为相关实体增加价值

EasyAdmin 3 日期时间选择器时间格式

Symfony 4 EasyAdmin 如何加密密码?