3

我想用 JMSSerializerBundle 和 FOSRestBundle 序列化并只返回我的实体的几个属性。

例如我有这个属性:

用户

  • 用户名
  • 电子邮件
  • 生日
  • 注释

注释

  • 文本
  • 约会时间

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

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

非常感谢

4

1 回答 1

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,它允许您按角色保护控制器上的方法。为每个选项提供不同的路由/方法,并让包处理访问控制。

于 2013-02-11T23:38:14.947 回答