如何解决EasyAdmin 3:将数据限制为已登录用户仍然在表单下拉列表中显示其他数据
我正在使用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')
)有关系,并且当填充下拉列表时,它会忽略我的新功能。这样您将看到属于另一个用户的记录。
如何覆盖这些下拉列表,使其仅显示属于当前用户的数据?
解决方法
我找到了解决方案:将自定义查询传递给Symfony的基础EntityType
字段。
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())
;
}]),
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。