Как предотвратить удаление с помощью правил Firebase для переменных структур данных? - PullRequest
0 голосов
/ 28 сентября 2019

Согласно документации Firebase - https://firebase.google.com/docs/database/security/securing-data#structuring_your_rules.

  1. Я не могу использовать правило .validate для предотвращения удаления.

  2. Запись правил каскадирования.

Со следующими правилами безопасности:

{
    "Tickets": {
        ".read": true,
        "$CompetitionKey": {
            "tickets": {
                ".write": "true"
            }
        }
    }
}
let CompetitionKey = database.child("Tickets").push().key
let tickets = {
    ticketsArray
  }
const newData = {
    [`Tickets/${CompetitionKey}`]: tickets
}
database.update(newData) //PERMISSION DENIED
let CompetitionKey = database.child("Tickets").push().key
const newData = {
    [`Tickets/${CompetitionKey}/tickets`]: ticketsArray 
}
database.update(newData) //WORKS

Запись проверяет правило только по указанному пути.

Я могу зайти так далеко в декларации правил, так как мой ticketsArray - это массив, поэтому я не могу указать 1000 детей с ".write": "true".

Я бы согласился с правилом быстрого исправления типа:

{
    "Tickets": {
        ".read": true,
        "$CompetitionKey": {
            ".write": "newData.child("tickets").child("$ticketsArray").exists()",
            "tickets": {
            }
        }
    }
}

Как я могу это выразить?Я не могу найти способ .child($variables).В противном случае мне понадобятся такие правила, как это, но опять-таки глубокое правило игнорируется, как показано в первом фрагменте кода.

{
    "Tickets": {
        ".read": true,
        "$CompetitionKey": {
            "tickets": {
                "$ticketsArray": {
                    ".write":"newData.exists()"
                 }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...