Ошибка правила безопасности Firebase

Я пытаюсь реализовать некоторые правила безопасности firebase на консоли firebase. По сути, у меня есть элемент квитанции, и он состоит из идентификатора квитанции и идентификатора позиции. Я пытаюсь реализовать правило, чтобы проверить, существуют ли оба идентификатора перед вставкой.

Моя структура таблицы для квитанций:

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 ответ

Решение

Я думаю, что получил это, но ваша структура 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

Теперь предположим, что я хочу написать новый узел receive_item для элемента 1, квитанции 1, который будет выглядеть следующим образом:

  receipt_item_1
    item_id: "item_1"
    receipt_id: "recept_1

Правила должны проверить, существует ли item_1 в узле позиций, а квитанция_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/receivets / item_1

Те же самые понятия применяются для подтверждения квитанции

Другие вопросы по тегам