【问题标题】:Check value of a dynamic id in firebase rules检查 Firebase 规则中动态 id 的值
【发布时间】:2018-04-11 15:22:47
【问题描述】:

我是 Firebase 的新手,我正在为我的数据库编写规则。 我有这样的事情:

"messages" : {
  "generatedId1" : {
    "status" : "waiting"
    "sender" : "uid"
  },
  "generatedId2" : {
    "status" : "send"
    "sender" : "uid2"
  }
 }

这只是一个示例,并不是实际的数据库。

我想要的是设置规则,以便客户端可以请求所有状态为“等待”的消息,但不能请求状态为“发送”的消息。 问题是当我处于消息级别时,我不知道如何设置状态规则。

我有这样的事情:

"messages" : {
  ".read": "(auth != null && data.child($generated).child('status').val() === 'WAITING')"
}

这里的问题是我无法达到状态。 $generated 显然不起作用,我没有找到任何可以访问所有孩子的东西。

旁注,我已经考虑过分离列表(一个用于等待消息的列表和一个用于发送消息的列表),但在我的情况下它确实不是最佳的,我需要另一种解决方案(如果存在)

如果有的话,欢迎!

感谢您的帮助!

【问题讨论】:

    标签: firebase firebase-realtime-database rules


    【解决方案1】:

    您正在寻找query-based rules。在您的情况下,规则如下所示:

    "messages" : {
      ".read": "auth != null && 
               query.orderByChild == 'status' &&
               query.equalTo == 'waiting'" 
    }
    

    请记住,您必须使用相同的查询来读取数据。

    【讨论】:

    • 我会试试看,可能明天再来找你!但它看起来不错,我只需要检查它是否适用于所有用例。即使状态不是消息的直接子级,它也应该可以工作吗?
    • @RomainHuber 如果我正确阅读了文档,那是真的。但到目前为止我自己还没有使用过,所以我可能会误会。
    • 不幸的是,它看起来不起作用。状态不是消息的子节点,我认为除了更改我的数据库结构之外没有其他解决方案
    • 实际上它正在检查单个消息的子状态,而不是整个消息数组。 (从this blog 中的示例可以看出)但可能由于 equalTo 条件而失败。
    • 您能否将用于尝试阅读消息的代码添加到您的问题中?
    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 2019-03-31
    • 1970-01-01
    相关资源
    最近更新 更多