Firebase 安全规则:.indexOn 唯一 ID

Posted

技术标签:

【中文标题】Firebase 安全规则:.indexOn 唯一 ID【英文标题】:Firebase Security Rules: .indexOn unique ids 【发布时间】:2016-09-29 20:02:38 【问题描述】:

我有这个结构:

"post": 
   "groupMember": 
     "-KHFHEHFWDB1213": "true",
     "-KSJHDDJISIS011": "true",
     "-KJSIO19229129k": "true"
   

我想 .indexOn 自动生成的唯一 groupMember id。

我试过这样做:

"post": 
  ".indexOn": "groupMember"
  ...

但我仍然收到此错误:

考虑在 /post 中添加 ".indexOn": "groupMember/-KHFHEHFWDB1213"

那么如何在唯一 id 上添加 .indexOn?

更新:

这是我使用的查询(在 Swift 中):

postRef.queryOrderedByChild("groupMember/\(uid)").queryEqualToValue(true).observeEventType(.Value, ... )

【问题讨论】:

如果我错了,请纠正我,但我很确定它默认索引键? 你能提供你正在使用的查询,它给你一个索引错误吗? Chris 认为 Firebase 默认索引键是正确的,所以我的猜测是查询本身的格式不正确。 @MichaelBleigh 我更新了我的帖子 看来你想要的是queryOrderedByValue和".indexOn": [".value"] @MichaelBleigh 但是如何根据更深的孩子进行查询? 【参考方案1】:

要查询给定键之一是否具有值 "true"(请注意,键入时,您的数据结构是字符串,而不是布尔值 - 需要注意!)您需要创建安全规则像这样:


  "post": 
    "groupMember": 
      "$memberId": ".indexOn": ".value"
    
  

然后在/post/groupMember 路径上使用queryOrderedByValue("true")。需要注意的重要一点是规则中的$memberId,它声明了一个表示您自动生成的ID的通配符键,以及.value,这表明您想要索引而不是对子属性(如果您的结构有另一层嵌套)进行索引在直接叶节点值上。

【讨论】:

感谢您的回答。但是,如果我根据 /post/groupMember 路径查询此信息,那么我如何获取父信息,例如 /post/message 上的内容? 我想我不清楚你到底想做什么。您是否尝试通过当前用户是否是组成员来过滤一组帖子?如果是这样,您应该重新构建数据并可能进行非规范化。如果没有,您到底想完成什么? 所以有了这里的答案,.value 属性是否引用了 groupMember 值?如果我有一个通配符 $uid 代替 groupMember 并想从中建立索引,那么 .indexOn : .value 是否仍然适用于此处?

以上是关于Firebase 安全规则:.indexOn 唯一 ID的主要内容,如果未能解决你的问题,请参考以下文章

在 Firebase 规则中添加和 ".indexOn": ".value"

如何使用auth.uid变量在firebase上设置indexOn规则?

Firebase 安全规则检查孩子的唯一值#AskFirebase

为啥这个 Firebase“.indexOn”不起作用?

在 Firebase 中使用带有嵌套键的 .indexOn

如何在firebase实时数据库规则中设置变量