如何构建Firebase节点以限制用户访问并允许管理员提取报告数据?

时间:2017-01-19 23:25:20

标签: firebase firebase-realtime-database

上下文:我正在使用Firebase作为后端整理时间跟踪应用程序。我当前的节点结构在根目录中有时间条目和客户端,如下所示:

  • 时间录入

    • 条目ID
      • 用户ID
        • clientID,小时,日期,说明等
  • 客户

    • 客户端ID
      • 名称,项目等

如果我只是根据用户添加和提取时间条目,这种结构可以正常工作,但我想开始基于每个客户端组合报告。目前,这意味着为每个用户发出单独的HTTP请求,然后通过clientID进行过滤以获取数据。

一旦访问父节点,Firebase的规则结构将授予对所有子节点的访问权限,因此一个大列表不起作用,因为它不能限制用户查看或编辑彼此的条目。

问题:有没有办法构建节点,允许限制用户只管理自己的时间条目,以及允许一个查询拉出绑定到客户端的所有条目?

** 我能提出的唯一解决方案是将条目复制到仅用于报告目的的单个节点中,但这似乎不是一个可持续的选择

2 个答案:

答案 0 :(得分:0)

@AL。你的答案就是我在网上搜索文档之后的最新动态。复制数据是最佳选择。

新的Firestore beta似乎为此提供了一些解决方法。

答案 1 :(得分:0)

我这样做的方式是使用Cloud Firestore。

为每个客户创建根集合clients和文档。这会将数据划分为易于管理的块,以便客户管理员可以查看其公司的所有数据。

在客户端文档中,创建一个名为timeEntries的子集合。当用户写入此内容时,他们必须包含userId字段(您可以在规则中强制执行此操作),该字段等于request.auth.uid

https://firebase.google.com/docs/firestore/security/rules-conditions#data_validation

您现在可以创建允许管理员查询timeEntries子集合中的任何文档的读取规则,但是单个用户必须使用userId = request.auth.uid进行查询才能返回他们拥有的条目创建

https://firebase.google.com/docs/firestore/security/rules-conditions#security_rules_and_query_results

在您的users / {uid}集合或clients / {clientId}集合中,您可以轻松创建标记以识别管理员用户,并在读取数据时进行检查。

https://firebase.google.com/docs/firestore/security/rules-conditions#access_other_documents