如何防止使用Firebase规则删除可变数据结构?

时间:2019-09-27 23:09:59

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

根据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是一个数组,所以我不能用".write": "true"指定1000个孩子。

我可以接受这种规则的快速解决方案:

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

我该如何表达?我找不到通往.child($variables)的方法。 否则,我将需要像这样的规则,但是再次如第一个代码片段所示,深层规则将被忽略。

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

0 个答案:

没有答案