2017-02-02 8 views
1

私はJson Schemaで動作するインターフェイスを構築するのを手伝っています。そのスキーマに基づいてインターフェイスの生成について質問があります。内部ユーザー用と外部ユーザー用の2つの表示タイプがあります。どちらも同じデータを処理していますが、外部ユーザーは内部ユーザーよりもフィールドのサブセットが小さく表示されます。複数のレイアウトでjsonスキーマを使用する

例えば、ここで1つのスキーマがあり、それは死亡記事を定義します。

{ 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "description": "", 
    "type": "object", 
    "required": [ 
     "id", 
     "deceased" 
    ], 
    "properties": { 
     "id": { "type": "string" }, 
     "account": { 
      "type": "object", 
      "required": [ 
       "name" 
      ], 
      "properties": { 
       "id": { "type": "number" }, 
       "name": { "type": "string" }, 
       "website": { 
        "anyOf": [ 
         { 
          "type": "string", 
          "format": "uri" 
         }, 
         { 
          "type": "string", 
          "maxLength": 0 
         } 
        ] 
       }, 
       "email": { 
        "anyOf": [ 
         { 
          "type": "string", 
          "format": "email" 
         }, 
         { 
          "type": "string", 
          "maxLength": 0 
         } 
        ] 
       }, 
       "address": { 
        "type": "object", 
        "properties": { 
         "address1": { "type": "string" }, 
         "address2": { "type": "string" }, 
         "city": { "type": "string" }, 
         "state": { "type": "string" }, 
         "postalCode": { "type": "string" }, 
         "country": { "type": "string" } 
        } 
       }, 
       "phoneNumber": { 
        "anyOf": [ 
         { 
          "type": "string", 
          "format": "phone" 
         }, 
         { 
          "type": "string", 
          "maxLength": 0 
         } 
        ] 
       }, 
       "faxNumber": { 
        "anyOf": [ 
         { 
          "type": "string", 
          "format": "phone" 
         }, 
         { 
          "type": "string", 
          "maxLength": 0 
         } 
        ] 
       }, 
       "type": { "type": "string" } 
      } 
     }, 
     "deceased": { 
      "type": "object", 
      "required": [ 
       "fullName" 
      ], 
      "properties": { 
       "fullName": { "type": "string" }, 
       "prefix": { "type": "string" }, 
       "firstName": { "type": "string" }, 
       "middleName": { "type": "string" }, 
       "nickName": { "type": "string" }, 
       "lastName1": { "type": "string" }, 
       "lastName2": { "type": "string" }, 
       "maidenName": { "type": "string" }, 
       "suffix": { "type": "string" } 
      } 
     }, 
     "description": { "type": "string" }, 
     "photos": { 
      "type": "array", 
      "items": { "type": "string" } 
     } 
    } 
} 

内部ユーザーは、すべてのフィールドにアクセスすることができるだろうが、外部のユーザーが書き込み/アカウントのフィールドを読み取ることができないはず。

は、私が外部ユーザーのための2番目のスキーマをしなければならない、または別の表示レベルを示すための方法や、各フィールドのプライベート/パブリックはありますか?

+0

あなたはJSONスキーマ –

+0

本当だから私の唯一に適用できるのアクセス修飾子はありません2番目の非常によく似たスキーマを作るだけですか?そうだとすれば、その方向に進む前に必ず確認する必要があります。 – Lisa

+0

インターフェイスの生成はJSONスキーマ仕様の一部ではないため、UI生成に使用するライブラリがサポートするアクセス修飾子を使用することができます – esp

答えて

1

あなたはスキーマで定義されたフィールドへのアセスを制限することはできませんが、2つのスキーマファイルを持つことができ、一つは「パブリック」フィールド、および他の1制限されたフィールドを定義プラス制限フィールドを含むを定義します。

ので

公開schema.json:

{ 
    "properties" : { 
     "id" : ... 
    } 
} 

制限-schema.json:

{ 
    "allOf" : [ 
     { 
      "$ref" : "./public-schema.json" 
     }, 
     { 
      "properties" : { 
       "account": ... 
      } 
     } 
    ] 

} 
+0

アクセスは範囲外ですので厳密には正しくありません – esp

関連する問題