Firebase规则-如何将值限制为布尔值?

时间:2018-12-11 09:13:42

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

我有一个像这样的数据结构来查找公共用户可以/不能访问的数据结构。我想添加一个验证规则,以便该值只能是布尔值true / false。

root {
    Accessibility {
        "ID-123": true,
        "ID-234": false,
        "ID-345": true,
        "ID-456": true,
        "ID-567": false,
    }
    ....
    ....
}

但是,当我尝试使用模拟器向Accessibility写东西时,总是出现写拒绝错误,例如{“ TEST”:true}。我在做什么错了?

{
    "rules": {
        "Accessibility": {
            ".read": true,
            ".write": "auth != null",
            ".validate": "newData.val() == true || newData.val() == false"
        },
    ....
    ....
}

谢谢

2 个答案:

答案 0 :(得分:2)

根据您共享的规则,它会将规则应用到辅助功能的顶层,而不是其键,这意味着新数据包括键及其值,例如下面的ID-123: true将其重组以查看id并使用.isBoolean()函数。

{
  "rules": {
    "Accessibility": {
        ".read": true,
        "$id" : {
          ".write": true,
          ".validate": "newData.isBoolean()",
        }
    },
  }
}

然后在客户端SDK中以/Accessibility/ID-123true的值在false上进行更新/设置

答案 1 :(得分:0)

您是否尝试过使用 isBoolean()

从文档中说:

  

如果此RuleDataSnapshot包含布尔值,则返回true。返回   值:布尔值-如果数据是布尔值,则为true;否则为false。否则为假。

".validate": "newData.isBoolean()"