代码之家  ›  专栏  ›  技术社区  ›  user7691120

Firebase安全规则错误

  •  0
  • user7691120  · 技术社区  · 7 年前

    我的收据表结构:

    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 回复  |  直到 7 年前
        1
  •  0
  •   Jay    7 年前

    我想我得到了这个,但你的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\u item节点,如下所示:

      receipt_item_1
        item_id: "item_1"
        receipt_id: "recept_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()
    

    root.child('receipts').child( 'item_1' ).exists()
    

    检查根目录/收据/项目1是否存在

    相同的概念适用于验证receipt\u id