我的Firebase数据库组织如下。
正如您所看到的,它是一个字典数组(每个字典包含两个条目,' text'和#39; tag')。
它包含以下规则。我想要做的是确保newData包含一个名为' text'的字符串。和一个名为' tag'。
的字符串{
"rules": {
".read": "auth != null",
".write": "!data.exists() || !newData.exists()",
//Can write only Array with text and tag
".validate": "newData.hasChildren(['text', 'tag'])",
"$other": {
".validate": false
},
"text": {
".validate": "newData.isString()"
},
"tag": {
".validate": "newData.isString()"
}
}
}
当我给它提供以下JSON时,它说'模拟的写作被拒绝'在第10行(".validate": "newData.hasChildren(['text', 'tag'])",
)。
JSON文件:
{
"3": {
"text": "text message",
"tag": "this is a tag"
}
}
我该怎么写我的规则? 谢谢你的帮助。
答案 0 :(得分:2)
您将验证规则定义为过高一级。现在,您验证整个数据库是否包含子tag
和text
,但它并没有。相反,您想验证根目录下的每个子节点是否都有这些子节点,这要求您定义$
变量规则,如下所示:
{
"rules": {
".read": "auth != null",
"$childid": {
".write": "!data.exists() || !newData.exists()",
//Can write only Array with text and tag
".validate": "newData.hasChildren(['text', 'tag'])",
"$other": {
".validate": false
},
"text": {
".validate": "newData.isString()"
},
"tag": {
".validate": "newData.isString()"
}
}
}
}