Symfony 2 Доступ к данным объекта для formtype

1

Я делаю свое приложение для входа в Symfony2, и я новичок в Symfony. Я знаю, что у меня есть FOSUserBundle в моем распоряжении, но я сначала пытаюсь изучить безопасность.

Мой контроль доступа определяет 3 роли: ROLE_SUPER_ADMIN, ROLE_ADMIN и ROLE_USER. Кроме того, определенные роли имеют другие связанные с ними роли, такие как ROLE_ADMIN_VIEW_USERS

Я НЕ использую службу security.context для entity.roles для сопоставления своих ролей с сущностью, потому что я только хочу использовать ROLE_ADMIN и ROLE_USER. При регистрации каждому пользователю предоставляется роль ROLE_USER. Когда пользователь с ROLE_SUPER_ADMIN просматривает страницу редактирования для пользователя или администратора, я пытаюсь установить флажок "Сделать этого пользователя администратором". Если они уже имеют ROLE_ADMIN в объекте getRoles, поле будет проверено.

Если флажок установлен, я делаю это в действии

    if ($editForm->isValid()) {
            $role = ( 'ROLE_ADMIN' === $editForm->get('role')->getViewData())
                    ? "ROLE_ADMIN"
                    : "ROLE_USER";
            $entity->setRoles(array($role));
            $em->flush();

            return $this->redirect($this->generateUrl('admin_new_edit', array('id' => $id)));
        }

Поэтому мой вопрос: как установить флажок, если в объекте getRoles() есть ROLE_ADMIN? Помните, как указано выше, роли отображаются в сущности, но роли нет. Я не хочу использовать роли из сопоставленного объекта, потому что из службы безопасности есть несколько значений, которые я не хочу использовать.

    $builder
        ->add('username', 'text')
        ->add('password', 'password')
        ->add('email', 'email')
        ->add('role', 'choice', array(
            'mapped' => false,
            'label' => 'Make Admin',
            'value' => 'ROLE_ADMIN',
            'required' => false,
            //show following attribute only if entity getRoles is ROLE_ADMIN
            //how do i get the value from the entity?
            'attr' => array('checked'=>'checked'),
            ))
  • 0
    Таким образом, проблема, с которой вы столкнулись, заключается в том, чтобы определить, имеет ли установленный в настоящий момент просматриваемый объект User объект ROLE_ADMIN (с помощью User.getRoles() ), поэтому флажок по умолчанию установлен на флажок или не установлен?
  • 0
    да @JaredFarrish это правильно.
Показать ещё 7 комментариев
Теги:

1 ответ

0

Мое предложение было бы примерно так:

->add('role', 'choice', array(
            'mapped' => true,
            'label' => 'Make Admin',
            'multiple' => true,
            'expanded' => true,
            'choices' => array('ROLE_ADMIN' => 'Yes')
            'required' => false,
            ))

Значение должно автоматически выводиться из объекта, если у него есть свойство, называемое "ролями", как и для других полей. Вы также можете добавить другие роли в массив выбора, и вы получите флажок для каждого из них.

Однако я не проверял его, надеюсь, это сработает.

  • 0
    роль не отображается в базе данных, роли отображаются. В дополнение это отображается с json_array для уровня безопасности. Я не могу использовать роли, потому что список назначенных ролей намного больше, чем я хочу. В типе формы я хочу получить значение, хранящееся в базе данных / сущности под getRoles и установить флажок, если возвращение из getRoles равно ROLE_ADMIN
  • 2
    Хорошо, я вижу. Может быть, эта статья поможет вам: symfony.com/doc/current/cookbook/form/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню