Firebase安全规则错误

时间:2017-08-17 08:32:08

标签: firebase firebase-realtime-database firebase-security nosql

我正在尝试在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()"
         }
    }
}

但是,这会导致出现错误消息,指出不能有多个默认规则。我怎样才能做到这一点?

谢谢!

1 个答案:

答案 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