【问题标题】:How to deny access to child nodes with Firebase realtime database?如何使用 Firebase 实时数据库拒绝访问子节点?
【发布时间】:2021-02-10 03:39:34
【问题描述】:

我正在尝试拒绝访问我的 Firebase 实时数据库的“私有”子节点。

我的数据库如下所示:

event
..1
....end: "2020-10-27T17:30:00"
....privateData
......phone: "01111111"
......title: "Meeting with John"
....start: "2020-10-27T17:00:00"

我想拒绝访问 privateData 节点。

我了解到子节点继承自父节点,因此仅在我的 json 中检索“end”和“start”字段变得非常棘手

我目前的规则(显然是错误的)是:

{
  "rules": {
    "event": {
      "$uid": {
        ".read": "true",
        "privateData": {
            ".read": "false"
        }
      }
    }
  }
}

最后的过程是将所有 Event 没有它们的 privateData 子节点检索到我的 Angular 应用程序中。

Angular App 目前看起来像这样:

  eventsRef: AngularFireList<Event>;
  getBooking()
  {
    this.eventsRef = this.db.list('event');
    return this.eventsRef;
  }

非常感谢您的宝贵时间

【问题讨论】:

    标签: firebase firebase-realtime-database


    【解决方案1】:

    doc中所示:

    较浅的安全规则会覆盖较深路径的规则。子规则 只能授予父节点已经拥有的额外权限 宣布。他们不能撤销读取或写入权限。

    一种解决方案是将你的机密数据推送到另一个父节点,如下:

    event
    ..1
    ....end: "2020-10-27T17:30:00"
    ....start: "2020-10-27T17:00:00"
    .....
    event
    ..2
    ....end: "2020-10-29T17:30:00"
    ....start: "2020-10-29T17:00:00"
    .....
    // .....
    // .....
    // .....
    eventPrivateData
    ..1       //  <=== Same id than the other (master) node
    ....privateData
    ......phone: "01111111"
    ......title: "Meeting with John"
    ..2
    ....privateData
    ......phone: "09999999"
    ......title: "Meeting with Sophie"
    

    您可以使用update() 方法从前端或从后端通过云函数保持不同节点同步。

    【讨论】:

    • 谢谢!这个解决方案肯定会起作用,但遗憾的是它需要两个查询。但我不认为我们可以在 Firebase 和 NOSQL 上做任何其他事情。
    猜你喜欢
    • 2023-01-16
    • 2019-10-11
    • 2020-07-07
    • 2018-06-17
    • 2021-06-14
    • 2017-12-29
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多