FOSRestBundle / JMSSerializerBundle: взаимодействие с ролями безопасности Symfony2

Я хочу сериализовать и вернуть только несколько атрибутов моей сущности с помощью JMSSerializerBundle и FOSRestBundle.

Например, у меня есть следующие атрибуты:

Пользователь

  • Имя пользователя
  • Электронная почта
  • День рождения
  • Комментарии

Комментарии

  • Текст
  • ДатаВремя

Пользователи с ролью ROLE_ADMIN должны получить сериализованный объект всего пользовательского объекта. ROLE_USER должен получать только имя пользователя и все комментарии.

Как проще всего реализовать компонент безопасности Symfony2 в JMSSerializerBundle? Или мне нужно реализовать это в моем контроллере и сериализовать его «вручную»?

Большое Вам спасибо


person Ueli    schedule 11.02.2013    source источник


Ответы (1)


Я не думаю, что вам нужно делать все это вручную. Похоже, группы сериализации могут быть здесь хорошим решением.

use JMS\Serializer\Annotation\Groups;

/** @Groups({"admin", "user"}) */
$username

/** @Groups({"admin"}) */
$email

/** @Groups({"admin"}) */
$birthday

/** @Groups({"admin", "user"}) */
$comments

В вашем контроллере это будет просто вопрос проверки роли и использования правильной группы сериализации.

$serializer = $this->container->get('serializer');
$serializer->setGroups(array("admin")); or $serializer->setGroups(array("admin","user"));

Другим вариантом может быть JMSSecurityExtraBundle, который позволяет вам защищать методы вашего контроллера по ролям. Предоставьте разные маршруты/методы для каждой опции и позвольте пакету управлять доступом.

person Quint    schedule 11.02.2013