Firebase规则-读和写的工作方式不一样



我正试图以一种简单的方式使用"读"one_answers"写"规则,似乎相同的条件会导致它们各自不同的行为。

my rules:

{
    "rules": {
        ".read": true,
        ".write": false,
        "chat": {
            ".write": true
        },
        "users": {
            "$user_id": {
                 ".read": "$user_id === auth.uid",
                 ".write": "$user_id === auth.uid"
            }
        }
    }

从模拟器写入响应:

Attempt to write {"key":"value"} to /users/1 with auth={"provider":"anonymous","uid":"1234"}
    /:.write: "false"
        => false
    /users
    /users/1:.write: "$user_id === auth.uid"
        => false
No .write rule allowed the operation.
Write was denied.

从模拟器读取响应:

Attempt to read /users/1 with auth={"provider":"anonymous","uid":"1234"}
    /: "true"
        => true
Read was allowed.

为什么?

在规则的顶层,允许读,禁止写

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

Firebase规则是自上而下的:一旦你允许某一级别上的某些内容,你就不能在更低的级别上删除它。Firebase文档是这样说的:

这是理解安全和Firebase规则的关键概念。子规则只能向父节点已经声明的内容授予额外特权。它们不能撤销读或写权限。

所以你的顶级".read": true,取代了你放在较低级别的任何读规则。

相关内容

最新更新