【问题标题】:How to prevent read access for only node or some keys in realtime database firebase?如何防止实时数据库firebase中仅节点或某些键的读取访问?
【发布时间】:2019-11-18 08:02:59
【问题描述】:

我只想阻止一个节点的读取访问。

假设我有这样的节点

"0" : {
//somedata
},
"1": {
//somedata
},
"2": {
//somedata
},
"3": {
 //my private data
}

现在我不希望从任何连接中读取“3”。应该在那里写什么规则来防止它的读写访问?

我尝试使用以下规则:-

{
  "rules": {
      "$3": {
        ".read": false,
      }
    ".read": true,
    ".write": "auth!=null && auth.uid == 'myuid'",
  }
}

如果我这样做,那么在 child_add 中它给了我所有节点,现在也将“$3”更改为“3”并不重要

  {
     "rules": {
       ".read": true,
       ".write": "auth!=null && auth.uid == 'myuid'",
       "$3": {
           ".read": false,
        }
     }
  }

第二个给出了所有节点,因为在规则的第一行中,我使用了 read 键作为 true,即处理级联规则,因为 .read 和 .write 规则从上到下从 firebase 文档 Firebase Rules Docs

如果对我需要执行此操作的相同或不同方法有任何建议,请建议我这样做? 谢谢各位!

【问题讨论】:

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


    【解决方案1】:

    你很亲密。正如您正确阅读的那样,规则从更高层级联到更具体的层级。因此,如果您批准更高层的写入(就像您对数据库的根所做的那样),“允许的”写入权限适用于您的整个数据库。

    $ 用于identify a variable name in the path。因此,当您使用"$3" 时,您实际上是在定义一个名为"$3" 的变量,而不是引用特定键"3"。您要做的是指定一个用于所有不是"3" 的值的变量,按照惯例,它称为"$other"

    {
      "rules": {
        "3": {
          ".read": false,
          ".write": false
        },
        "$other": { // any key not named above at this level  
          ".read": true,
          ".write": "auth!=null && auth.uid == 'myuid'"
        }
      }
    }
    

    【讨论】:

    • 我实现了这个,我没有得到任何数据
    【解决方案2】:

    这应该可行:

    {
      "rules": {
          "3": {
            ".read": false,
            ".write": false,
          }
        ".read": true,
        ".write": "auth!=null && auth.uid == 'myuid'",
      }
    }
    

    第一次你正在检查,如果数据是“3”,阻止它并返回。如果不检查以下规则(在这种情况下,允许经过身份验证的用户)。

    【讨论】:

    • 这个不行,它给了我所有的节点,我不想要所有的节点
    猜你喜欢
    • 2019-09-29
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 2019-03-23
    相关资源
    最近更新 更多