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规则?