EasyAdmin 3 : 로그인 한 사용자로 데이터 제한은 여전히 ​​양식 드롭 다운에 다른 데이터를 표시합니다.

Aug 17 2020

저는 Symfony 5를 사용하고 있습니다.

로그인 한 모든 사용자가 EasyAdmin 3에서 자신의 공간을 갖기를 원하므로 사용자는 다른 사용자의 기록을 볼 수 없습니다. 나는 데이터베이스의 모든 테이블과 함께 사용자를 저장합니다.

간단한 목록보기의 경우 AbstractCrudController다음 확장을 사용하여이 작업을 수행 할 수있었습니다 .

<?php
namespace App\Controller\Admin;

use Doctrine\ORM\QueryBuilder;
use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
use EasyCorp\Bundle\EasyAdminBundle\Orm\EntityRepository;

abstract class CustomCrudController extends AbstractCrudController
{
    public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder
    {
        $qb = $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters);
        $qb->andWhere('entity.user = :user'); $qb->setParameter('user', $this->getUser()); return $qb;
    }
}

나는 또한 EventSubscriber.

문제는 일부 양식이 다른 엔티티 (예 :)와 관련이 AssociationField::new('food')있고 드롭 다운을 채울 때 새 기능을 무시한다는 것입니다. 따라서 다른 사용자의 레코드를 볼 수 있습니다.

현재 사용자에게 속한 데이터 만 표시하도록 이러한 드롭 다운을 재정의하려면 어떻게해야합니까?

답변

1 Oli Aug 17 2020 at 14:24

해결책을 찾았습니다. 사용자 지정 쿼리를 EntityTypeSymfony 의 기본 필드에 전달했습니다 .

AssociationField::new('food')
    ->setRequired(true)
    ->setFormTypeOptions(['query_builder' => function (EntityRepository $em) { return $em->createQueryBuilder('f')
        ->where('f.user = :user')
        ->orderBy('f.title', 'ASC')
        ->setParameter('user', $this->getUser())
        ;
}]),