我正在尝试在firebase控制台上实现一些firebase安全规则。基本上,我有一个收据项目,它包括收据ID和项目ID。我试图实现一个规则来检查插入前是否存在两个ID。
我的收据表结构:
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()"
}
}
}
但是,这会导致出现错误消息,指出不能有多个默认规则。我怎样才能做到这一点?
谢谢!
答案 0 :(得分:0)
我想我得到了这个但你的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
现在假设我想为第1项收据1写一个新的receipt_item节点,如下所示:
receipt_item_1
item_id: "item_1"
receipt_id: "recept_1
规则需要验证item_1中是否存在items_1,而收据节点中是否存在receipt_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 / receipts / item_1是否存在
相同的概念适用于验证receipt_id