Согласно документации Firebase - https://firebase.google.com/docs/database/security/securing-data#structuring_your_rules.
Я не могу использовать правило .validate для предотвращения удаления.
Запись правил каскадирования.
Со следующими правилами безопасности:
{
"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()"
}
}
}
}
}