在多个布局中使用 json 架构

Using a json schema in multiple layouts

我正在帮助构建一个使用 Json 模式的界面,我对基于该模式的界面生成有疑问。有两种显示类型 - 一种用于内部用户,一种用于外部用户。两者都处理相同的数据,但外部用户应该看到比内部用户更小的字段子集。

例如,这里有一个模式,它定义了一个讣告:

{
    "$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" }
        }
    }
}

内部用户将能够访问所有字段,但外部用户不应read/write帐户字段。

我应该为外部用户制作第二个模式,还是有办法在每个字段上指示不同的显示级别或 public/private?

您不能限制对架构中定义的字段的访问,但您可以有 2 个架构文件,一个定义 "public" 字段,另一个定义受限字段并包括受限字段。

所以

public-schema.json:

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

restricted-schema.json:

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

}