当我认为我的规则应该允许时,Firebase 模拟器阻止写入

Firebase Simulator blocking write, when I think it should be allowed by my rules

我正在编写一个简单的 Firebase 应用程序。所有逻辑现在都可以正常工作,但我正在尝试编写一些安全规则以至少阻止有人弄乱我的所有数据。

我不跟踪用户或对他们进行身份验证,任何人无需登录即可使用我的应用程序。

我有一份这种格式的足球运动员名单:

Player
 -results
   -0
   -1
   -2
   -3

每个结果都有一个名为 Points 的字段,我希望它是可写的,但是一个名为 Name 的字段,我不希望它是可写的。

我已经执行了以下规则:


{
    "rules": {
      ".read":true,

        "Player" : {
          "results": {
            "$results_id": {
              ".read":true,
            "Name":{
              ".read":true,
              ".write":false
              },

            "Points":{
              ".read":true,
              ".write":true,
              }


             }
          }
      }
  }
}

但是当使用模拟器将{ "Points" : 2}写入/Player/results/1时,我得到一个错误信息:

Attempt to write {"Points":2} to /Player/results/1 with auth=null
    /
    /Player
    /Player/results
    /Player/results/1

No .write rule allowed the operation.
Write was denied.

我以为 $record_id 是一个匹配 ID 的通配符,显然我错了,但是有人可以给我解释一下吗?

就像读取操作一样,您需要在读取级别获得读取权限,对于写入操作,您需要在写入级别获得权限。

您正在执行对 /Player/results/1 的写入,这是不允许的。

您可以写信给 /Player/results/1/Points。因此,如果您将操作更改为使用值 2 写入 /Player/results/1/Points,它将被允许。