Ошибка правила безопасности Firebase
Я пытаюсь реализовать некоторые правила безопасности firebase на консоли firebase. По сути, у меня есть элемент квитанции, и он состоит из идентификатора квитанции и идентификатора позиции. Я пытаюсь реализовать правило, чтобы проверить, существуют ли оба идентификатора перед вставкой.
Моя структура таблицы для квитанций:
receipts {
accountID {
receiptID {}
}
}
Структура таблицы для предметов:
items {
itemID {}
}
Структура таблицы для позиций поступления:
receiptItems {
receiptItemID {
itemID, receiptID
}
}
Чего я добился до сих пор:
"receiptItems": {
"$receiptItemID" : {
"$receiptID" : {
".validate": "root.child('receipts/' + $receiptID).exists()"
},
"$itemID" : {
".validate": "root.child('items/' + $itemID).exists()"
}
}
}
Однако это приводит к сообщению об ошибке, в котором говорится, что не может быть несколько правил по умолчанию. Как мне этого добиться?
Спасибо!
1 ответ
Я думаю, что получил это, но ваша структура JSON немного неясна, поэтому позвольте мне дать мою интерпретацию.
items
item_0
item_data: "some data about item 0"
item_1
item_data: "some data about item 1"
receipts
receipt_0
receipt_data: "data about receipt 0"
receipt_1
receipt_data: "data about receipt 1"
receipt_items
receipt_item_0
item_id: "item_0"
receipt_id: "recept_0
Теперь предположим, что я хочу написать новый узел receive_item для элемента 1, квитанции 1, который будет выглядеть следующим образом:
receipt_item_1
item_id: "item_1"
receipt_id: "recept_1
Правила должны проверить, существует ли item_1 в узле позиций, а квитанция_1 существует в узле поступления.
{
"rules": {
".read": "auth != null",
".write": "auth != null",
"receipt_items": {
"$ri": {
".validate": "root.child('items').child( newData.child('item_id').val() ).exists()
&&
.validate": "root.child('receipts').child( newData.child('receipt_id').val() ).exists()"
}
}
}
}
обратите внимание, что правилом проверки является одна длинная строка "..&&.." - я разбил ее на три строки для удобства чтения
Выходя изнутри:
newData.child('item_id').val()
получает значение дочернего узла входящих данных 'item_id', который в данном случае равен item_1
root.child('receipts').child( 'item_1' ).exists()
проверьте, существует ли root/receivets / item_1
Те же самые понятия применяются для подтверждения квитанции