2013-02-11 7 views
3

Я хочу сериализовать и возвращать только несколько атрибутов моего объекта с JMSSerializerBundle и FOSRestBundle.FOSRestBundle/JMSSerializerBundle: взаимодействовать с Symfony2 Роли безопасности

Например, у меня есть это атрибуты:

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

  • Пользователь
  • E-Mail
  • День рождения
  • Комментарии

Комментарии

  • Текст
  • DateTime

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

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

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

ответ

3

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

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, который позволяет вам безопасные методы контроллера с помощью роли. Предоставьте другой маршрут/метод для каждого параметра и позвольте управлению доступом к пакету управлять.

 Смежные вопросы

  • Нет связанных вопросов^_^