假设我有一本藏书“藏书”,里面有大量儿童。
(请这个例子是字典,所以不要专注于书籍的最佳解决方案)
现在,我知道我们可以/应该以这样的方式构建集合:每个用户都拥有他/她自己的集合,如下所示:
但我想知道是否有如下所示的集合,使用“规则”允许用户只读取“阅读器”属性下列出用户ID的子项。
如果可以使用此规则,我们是否可以调用参考mDatabase.child(“books”)并只接收用户可以阅读的书籍而不是所有书籍?
答案 0 :(得分:2)
不,这是不可能的,因为Firebase规则不会充当过滤器。如果您尝试在示例中请求所有图书,但阅读规则表明您无权访问其中一本图书,则用户根本无法请求图书,整个请求将失败。
处理此类事情的推荐方法是以不同方式列出您的读者列表。一个有效的结构将是这样的:
因为您知道用户的用户ID,所以查找用户很便宜。然后检查用户正在阅读哪些书籍也很便宜,因为用户对象中有这些书籍。如果您拥有用户正在阅读的图书的ID,您可以单独通过其ID获取这些图书,而无需请求整套图书。
在那种情况下,性能不再是问题。通过它在数组中的索引查找对象,或者它在对象中的键是相当便宜的。