2013-02-11 84 views
3

我想使用JMSSerializerBundle和FOSRestBundle序列化并返回实体的一些属性。FOSRestBundle/JMSSerializerBundle:与Symfony2安全角色交互

例如,我有这样的属性:

用户

  • 用户名
  • 电子邮件
  • 生日
  • 评论

条评论

  • 文本
  • 日期时间

用户与角色ROLE_ADMIN应该得到整个用户对象的序列化对象。 ROLE_USER应该只能获得用户名和所有评论。

在JMSSerializerBundle中实现Symfony2安全组件的最简单方法是什么?或者我需要在我的控制器中执行此操作并“手动”序列化它?

非常感谢你

回答

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它可以让你的控制器通过作用于安全的方法。为每个选项提供不同的路由/方法,并让包处理访问控制。