symfony - FOSRestBundle/JMSSerializerBundle : interact with Symfony2 Security roles

标签 symfony fosrestbundle jmsserializerbundle

我想使用 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/

相关文章:

symfony - 如何在存储库 Symfony 2.7 中获取当前用户

symfony - FOSRestBundle:路线和参数注释

symfony - 序列化实体中的 JSON 根名称

symfony - Doctrine 二级缓存 w/Redis

symfony - Sonata管理包,如何使用实体存储库类

php - 如何将 FOS\RestBundle 的默认格式指定为 json?

serialization - 使用 JMS Serializer 包添加额外字段

symfony - Doctrine 2 : disable lazy loading/proxy generation.

php - 如何在CLI中作用于PHP的配置来添加pdo模块

php - FosRestBundle PATCH 操作阻止具有空值/默认值的更新实体