У мене є база даних Firebase, організована наступним чином.
Як ви можете бачити, це масив словників (кожен словник містить дві записи, "text" і "tag").
Він містить наступні правила. Що я хочу зробити, це переконатися, що newData містить рядок під назвою "текст" і рядок, який називається "тегом".
{
"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"
}
}
Як я повинен писати мої правила? Дякую за твою допомогу.
Відповіді:
2 для відповіді № 1Ви визначаєте правило перевірки на один рівень занадто високо. Зараз ви перевіряєте, що в цілому база даних має дітей 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()"
}
}
}
}