Firebase 安全规则错误
Firebase security rule error
我正在尝试在 firebase 控制台上实施一些 firebase 安全规则。基本上,我有一个收据项目,它由收据 ID 和项目 ID 组成。我正在尝试实施一个规则来检查两个 ID 在插入之前是否存在。
我的 table 收据结构:
receipts {
accountID {
receiptID {}
}
}
Table 项目结构:
items {
itemID {}
}
Table 收据项目结构:
receiptItems {
receiptItemID {
itemID, receiptID
}
}
到目前为止我取得的成就:
"receiptItems": {
"$receiptItemID" : {
"$receiptID" : {
".validate": "root.child('receipts/' + $receiptID).exists()"
},
"$itemID" : {
".validate": "root.child('items/' + $itemID).exists()"
}
}
}
但是,这会导致出现一条错误消息,指出不能有多个默认规则。我怎样才能做到这一点?
谢谢!
我想我得到了这个,但是你的 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 存在于项目节点中并且 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
我正在尝试在 firebase 控制台上实施一些 firebase 安全规则。基本上,我有一个收据项目,它由收据 ID 和项目 ID 组成。我正在尝试实施一个规则来检查两个 ID 在插入之前是否存在。
我的 table 收据结构:
receipts {
accountID {
receiptID {}
}
}
Table 项目结构:
items {
itemID {}
}
Table 收据项目结构:
receiptItems {
receiptItemID {
itemID, receiptID
}
}
到目前为止我取得的成就:
"receiptItems": {
"$receiptItemID" : {
"$receiptID" : {
".validate": "root.child('receipts/' + $receiptID).exists()"
},
"$itemID" : {
".validate": "root.child('items/' + $itemID).exists()"
}
}
}
但是,这会导致出现一条错误消息,指出不能有多个默认规则。我怎样才能做到这一点?
谢谢!
我想我得到了这个,但是你的 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 存在于项目节点中并且 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