我想用 JMSSerializerBundle 和 FOSRestBundle 序列化并只返回我的实体的几个属性。
例如我有这个属性:
用户
- 用户名
- 电子邮件
- 生日
- 注释
注释
- 文本
- 约会时间
具有角色 ROLE_ADMIN 的用户应该获得整个用户对象的序列化对象。ROLE_USER 应该只获取用户名和所有评论。
在 JMSSerializerBundle 中实现 Symfony2 安全组件的最简单方法是什么?还是我需要在我的控制器中实现它并“手动”序列化它?
非常感谢
我想用 JMSSerializerBundle 和 FOSRestBundle 序列化并只返回我的实体的几个属性。
例如我有这个属性:
用户
注释
具有角色 ROLE_ADMIN 的用户应该获得整个用户对象的序列化对象。ROLE_USER 应该只获取用户名和所有评论。
在 JMSSerializerBundle 中实现 Symfony2 安全组件的最简单方法是什么?还是我需要在我的控制器中实现它并“手动”序列化它?
非常感谢
我认为您不必全部手动完成。听起来序列化组在这里可能是一个很好的解决方案。
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,它允许您按角色保护控制器上的方法。为每个选项提供不同的路由/方法,并让包处理访问控制。