2017-01-12 16 views
1

私のアプリでは、私はユーザーがあります。 各ユーザーはそう(...ホームページビュー、お問合せ先ビュー)各役割が、いくつかの権限を持つことができますエンティティのリレーションの深さをmanyToManyリレーションで選択する

を1つの役割(管理者、テスター、...) を持って、私は、多対多の関係

を持っているので、私はロールからアクセス許可と権限からロールを取得したい、私は双方向の関係を持っています。

結果例を開始する...私は許可を得るとき、それはその役割とその権限を持つそれぞれの役割を取得します。私が欲しいもの

はちょうどその役割

私の問題で1社の許可を選択することです:私が欲しいもの

{ 
    "id": 4, 
    "nom": "Accès au backoffice", 
    "slug": "page-backoffice", 
    "role": [ 
    { 
     "id": 1, 
     "libelle": "Administrateur", 
     "permission": [ 
     { 
      "id": 3, 
      "nom": "Visualisation du stock global", 
      "slug": "page-visu-stock-global", 
      "role": [ 
      { 
       "id": 2, 
       "libelle": "Responsable d'exploitation", 
       "permission": [ 
       { 
        ....... 

は次のとおりです。

{ 
    "id": 4, 
    "nom": "Accès au backoffice", 
    "slug": "page-backoffice", 
    "role": [ 
    { 
     "id": 1, 
     "libelle": "Administrateur", 
     "slug": "administrateur" 
    }, 
    { 
     "id": 2, 
     "libelle": "Responsable d'exploitation", 
     "slug": "responsable-exploitation" 
    }, 
    .... 

どのようにすることができます 私がやる ?

私のORMファイル関係の詳細: Permissions.orm.yml:

manyToMany: 
    role: 
     targetEntity: Role 
     cascade: { } 
     fetch: LAZY 
     mappedBy: permission 
     inversedBy: null 
     joinTable: null 
     orderBy: null 

role.orm.yml:

manyToMany: 
    permission: 
     targetEntity: Permissions 
     cascade: { } 
     fetch: LAZY 
     mappedBy: null 
     inversedBy: role 
     joinTable: 
      name: role_permission 
      joinColumns: 
       - 
        name: role_id 
        referencedColumnName: id 
      inverseJoinColumns: 
       - 
        name: permission_id 
        referencedColumnName: id 
     orderBy: null 

+1

あなたは[連載グループ]をご覧ください(https://symfony.com/doc/current/components/serializer.html#component-serializer-attributes-groups )と[それらを有効にする方法](https://symfony.com/doc/current/serializer.html#using-serialization-groups-annotations)を参照してください。それがあなたに役立つことを願っています – OlivierC

+0

シリアル化を使用すると、ループのアクセス権>ロール>権限>ロールを行うデータを取得するためにdoctrineが防止されません...間違っていますか? –

+0

あなたは怠惰なフェッチをしているので、データが必要な場合にのみ起こります。事実、あなたはオブジェクトをjsonとして提示しています。私はそれがAPI用にシリアル化されていると仮定しました。 – OlivierC

答えて

1

ほとんどそうしないあなたの助けをありがとう一度にすべてのエンティティをAPIに公開したい場合、特に関連するエンティティを他のエンティティに公開する場合。

シリアル化グループを使用すると、APIで公開する属性を選択できます。このようにすると、関連するエンティティ(ロールを公開するロールのようなロールのようにロールを公開して、ロールの権限を無限に広げてロールオーバーするなど)を公開することを避けることができます。

symfonyにはwhat are serialization groupshow to enable and use serialization groupsについてのドキュメントがあります。ここで

-1

はそれを行う方法の例です:

use JMS\Serializer\Annotation\MaxDepth; 

class User 
{ 
    private $username; 

    /** @MaxDepth(1) */ 
    private $friends; 

    /** @MaxDepth(2) */ 
    private $posts; 
} 

class Post 
{ 
    private $title; 

    private $author; 
} 

とコントローラ用:

use JMS\Serializer\SerializationContext; 

$serializer->serialize($data, 'json', SerializationContext::create()->enableMaxDepthChecks()); 

注連載中の「フィルタ」のデータに約20注釈のキーワードがあります。

例ソース:

http://jmsyst.com/libs/serializer/master/cookbook/exclusion_strategies#limiting-serialization-depth-of-some-properties

+0

このリンクは質問に答えるかもしれませんが、ここで答えの重要な部分を含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](/レビュー/低品質の投稿/ 18441824) – Jobin

関連する問題