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