首页 > 解决方案 > easy admin 3 过滤器关联字段

问题描述

我正在努力寻找在编辑视图中过滤关联字段列表的解决方案。

情况:

根据用户角色,我只想显示其中SupplierUser一部分allowedSuppliers

是否可以过滤这些以便用户看不到不允许的选项enabledSuppliers关联字段?

标签: phpsymfonyeasyadmin

解决方案


这可以通过在 configureFields 中的字段上通过 setFormTypeOptions 更改选择来完成。我在下面放了一个例子来检查用户角色是否不是ROLE_ADMIN如果不是它只会显示允许的选择,这似乎就像我想要的那样工作。

由于文档中没有明确解释这一点,因此进行了一些猜测和挖掘。

public function configureFields(string $pageName): iterable
{
    $fields = [];
    if (array_search('ROLE_ADMIN', $this->getUser()->getRoles()) === false) {
        /** @var User|null $user */
        $user = $this->entityManager->getRepository(User::class)->findOneBy([
            'username' => $this->getUser()->getUsername()
        ]);
        if ($user) {
            $fields[] = AssociationField::new('suppliers')->onlyOnForms()->setFormTypeOptions([
                "choices" => $user->getEnabledSuppliers()->toArray()
            ]);
        }
    } else {
        $fields[] = AssociationField::new('suppliers')->onlyOnForms();
    }
    return $fields;
}

推荐阅读