Я делаю свое приложение для входа в 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'),
))
Мое предложение было бы примерно так:
->add('role', 'choice', array(
'mapped' => true,
'label' => 'Make Admin',
'multiple' => true,
'expanded' => true,
'choices' => array('ROLE_ADMIN' => 'Yes')
'required' => false,
))
Значение должно автоматически выводиться из объекта, если у него есть свойство, называемое "ролями", как и для других полей. Вы также можете добавить другие роли в массив выбора, и вы получите флажок для каждого из них.
Однако я не проверял его, надеюсь, это сработает.
User
объектROLE_ADMIN
(с помощьюUser.getRoles()
), поэтому флажок по умолчанию установлен на флажок или не установлен?