Я делаю свое собственное приложение для входа в Symfony2, и я новичок в Symfony. Я знаю, что у меня есть FOSUserBundle в моем распоряжении, но я сначала пытаюсь изучить безопасность.Symfony 2 Данные сущности доступа для формы
Управление доступом определяет 3 роли: ROLE_SUPER_ADMIN, ROLE_ADMIN и ROLE_USER. В дополнение к этому определенные роли имеют другие роли, связанные с ними, такие как ROLE_ADMIN_VIEW_USERS
Я НЕ с использованием security.context service на 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'),
))
Таким образом, проблема, с которой вы сталкиваетесь, заключается в определении того, имеет ли объект редактирования в настоящее время редактируемый объект 'User' набор' ROLE_ADMIN' (с использованием 'User.getRoles()'), поэтому флажок установлен по умолчанию для проверки или проверки? –
да @JaredFarrish это правильно. –
И проблема в 'User.getRoles()' даст вам что-то вроде '{" role ": [" ROLE_USER "," ROLE_SUPER_ADMIN "," ROLE_ADMIN "]}' взамен? Таким образом, необработанный возврат 'getRoles()' не говорит вам, установлен ли параметр ROLE_ADMIN, потому что на самом деле он дает вам строку JSON всех ролей? Почему бы вам не добавить метод 'User.isAdmin()', который дает вам эту информацию, получая данные из 'User.getRoles()', читая его и проверяя роли 'ROLE_SUPER_ADMIN' или' ROLE_ADMIN' в список? –