【问题标题】:Firebase rule - how to restrict value to boolean?Firebase 规则 - 如何将值限制为布尔值?
【发布时间】:2019-05-12 05:52:10
【问题描述】:

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

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

但是,当我尝试使用模拟器向 Accessibility 写入内容时,总是会收到 write denied 错误,例如 { "TEST": true }。我做错了什么?

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    从您共享的规则中,它将规则应用于最高级别的可访问性,而不是其键,这意味着新数据包括键及其值,例如ID-123: true 下面我对其进行了重组以查看 id 并利用 .isBoolean() 函数。

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

    然后在客户端 sdk 中更新/设置 /Accessibility/ID-123,值为 truefalse

    【讨论】:

      【解决方案2】:

      您是否尝试过使用 isBoolean()

      从文档中说:

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

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

      【讨论】:

      • 是的,我尝试了 newData.isBoolean(),但我得到了同样的错误。我相信 newData 会是 { "TEST": true } 这绝不是布尔值。这就是我尝试 newData.val() 的原因。
      猜你喜欢
      • 2018-09-27
      • 2012-10-07
      • 1970-01-01
      • 2014-01-24
      • 2016-01-13
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多