Только EasyAdmin 3 Список данных, принадлежащих авторизованному пользователю

Я недавно перешел с easyadmin 2 на easyadmin 3, и теперь в моих списках я вижу все данные от объекта (например, компании). В easyadmin 2 он автоматически (по крайней мере, я так думаю) ограничивал вывод, принадлежащий зарегистрированному пользователю.

Я читал, что могу устанавливать пользовательские функции для каждого контроллера, например

 public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder
    {
        if (!in_array("ROLE_ADMIN",$this->getUser()->getRoles())) {
            $qb = $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters);
            $qb->andWhere('entity.creator = :user');
            $qb->setParameter('user', $this->getUser());
            return $qb;
        }
    }

но я думаю, это не может быть решением, поскольку каким-то образом он работал и в easyadmin 2, без необходимости писать собственные функции indexQueryBuilder.

Любая помощь очень ценится.


person HackReb    schedule 23.11.2020    source источник


Ответы (1)


У меня есть роли АДМИНИСТРАТОР, МЕНЕДЖЕР, КУРЬЕР, поэтому мой код:

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

class LuggageManagerCrudController extends AbstractCrudController 
{
   public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder
    {
        $qb = $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters);

        if (in_array('ROLE_MANAGER', $this->getUser()->getRoles())) {
            $qb->andWhere('entity.manager = :user');
        } else {
            $qb->andWhere('entity.courier = :user');
        }

        $qb->setParameter('user', $this->getUser()->getEmail());

        return $qb;
    }
}

И у меня есть еще один AdminCrudController для ролей ADMIN

person indover    schedule 01.12.2020