3

JMSSerializerBundleとFOSRestBundleを使用して、エンティティのいくつかの属性のみをシリアル化して返したい。

たとえば、私はこの属性を持っています:

ユーザー

  • ユーザー名
  • Eメール
  • お誕生日
  • コメントコメント

コメントコメント

  • 文章
  • 日付時刻

ロール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"));

もう1つのオプションは、JMSSecurityExtraBundleです。これにより、コントローラーのメソッドを役割ごとに保護できます。オプションごとに異なるルート/メソッドを提供し、バンドルにアクセス制御を処理させます。

于 2013-02-11T23:38:14.947 に答える