【发布时间】:2017-01-17 21:03:24
【问题描述】:
所以,假设我有这样的数据:
{
"events" : {
"s0d980983s" :
{ creator: "bob@bob.com",
text: "Bob says 'My name is Robert'" },
"kjl34jl234j" :
{ creator: "fred@fred.com",
text: "Fred says 'My name is Fredrick'" }
}
"users" : {
"bob@bob.com" : { "paid": true },
"fred@fred.com" : { "paid": false }
}
}
我假设这是构建数据的正确方法。创建数据时,我使用push()方法为数据创建一个新的key,然后将数据的创建者存储在里面。
我想这样做:
- 我可以允许一组用户中的任何人访问某些数据(当然也不允许其他人访问)。
- 查询是“优化的”,这意味着如果我有数千条记录,我不会遍历所有数据。
更具体地说,例如,我希望lizzie@lizzie.com 能够看到s0d980983s。
我对如何构建数据以及我的 Firebase 规则应该是什么样子感到困惑。
会是这样吗?
{ "events" : {
"s0d980983s" :
{ creator: "bob@bob.com",
viewers: { "bob@bob.com": true,
"lizzie@lizzie.com" : true },
text: "Bob says 'My name is Robert'" },
...
}
我不明白如何搜索一组用户可以查看的事件。我不相信 Firebase 支持某种可以使这段代码正常工作的通配符,对吧?
var ref = firebase.database().ref( "events/*/viewers/lizzie@lizzie.com" ).on(...);
我还想引用用户表中的事件吗?我不确定我是否了解如何展平数据(非规范化)并在两个地方保留引用以支持这样的查询。我是否应该期望进行多个查询,首先检索存储在用户对象中的事件列表,然后使用它们的键逐个检索它们?但是,如何将该逻辑放入我的 firebase 规则中?
【问题讨论】:
-
您可以在编写安全规则时使用通配符位置。此视频可能对您有所帮助youtube.com/watch?v=PUBnlbjZFAI
标签: firebase firebase-realtime-database firebase-security