我想使用 JMSSerializerBundle 和 FOSRestBundle 序列化并仅返回实体的几个属性。
例如我有这个属性:
用户
- 用户名
- 电子邮件
- 生日
- 评论
评论
- 文字
- 日期时间
具有 ROLE_ADMIN 角色的用户应该获得整个用户对象的序列化对象。 ROLE_USER 应该只获取用户名和所有评论。
在 JMSSerializerBundle 中实现 Symfony2 安全组件的最简单方法是什么?或者我是否需要在我的 Controller 中实现它并“手动”序列化它?
非常感谢
最佳答案
我认为您不必全部手工完成。听起来序列化组可能是一个很好的解决方案。
use JMS\Serializer\Annotation\Groups;
/** @Groups({"admin", "user"}) */
$username
/** @Groups({"admin"}) */
$email
/** @Groups({"admin"}) */
$birthday
/** @Groups({"admin", "user"}) */
$comments
在您的 Controller 中,只需检查角色并使用正确的序列化组即可。
$serializer = $this->container->get('serializer');
$serializer->setGroups(array("admin")); or $serializer->setGroups(array("admin","user"));
另一个选项是 JMSSecurityExtraBundle它允许您按角色保护 Controller 上的方法。为每个选项提供不同的路由/方法,并让 bundle 处理访问控制。
关于symfony - FOSRestBundle/JMSSerializerBundle : interact with Symfony2 Security roles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14822519/