простой админ 3 фильтр AssociationField - PullRequest
0 голосов
/ 06 августа 2020

Я изо всех сил пытаюсь найти решение для фильтрации списка полей ассоциации в режиме редактирования.

Ситуация:

  • User имеет allowedSuppliers ManyToMany до Supplier
  • Website имеет enabledSuppliers ManyToMany до Supplier

В зависимости от ролей пользователя я хочу показать только выбор Supplier, который находится в User 's allowedSuppliers

Можно ли отфильтровать их, чтобы пользователь не видел недопустимые параметры enabledSuppliers Поле ассоциации?

1 Ответ

0 голосов
/ 06 августа 2020

Это можно сделать, изменив варианты с помощью setFormTypeOptions в поле в configureFields. Я привел пример ниже, который проверяет, не соответствует ли роли пользователя 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;
}
...