【问题标题】:How do I allow a particular firestore user account access to a document created by another user? [closed]如何允许特定的 Firestore 用户帐户访问由其他用户创建的文档? [关闭]
【发布时间】:2020-04-22 19:28:27
【问题描述】:

我正在尝试建立一个安全系统,允许用户读取其他用户创建的特定文档。我试图通过安全规则思考我的方式,但我不确定实施。理想情况下,文档的所有者将允许其他用户“读取”此文档的任何更新和更改

目前,我正在创建一个随机字符串并使用该字符串创建一个文档。然后,用户有机会与另一个用户共享此信息(例如通过文本或其他一些机制)。如果其他用户有字符串(会话 ID),那么他们可以将其输入到他们的视图中,然后实时读取用户所做的任何更新。

问题是我不能保证会话 ID 是唯一的,而且我确信这不是很安全。我想我需要创建一个文档并使用会话 ID 在该文档中创建一个值。同样,不确定如何确保会话 ID 在所有其他文档中是唯一的。

我只是不确定安全实施此功能的最佳方法是什么。在此先感谢您对我们的指导的任何帮助。

【问题讨论】:

  • 你的问题对于 Stack Overflow 来说有点含糊。我建议编辑这个问题,讨论你想要的文档是什么样的,你用来读写它们的代码,以及第一次尝试表达安全规则,即使它们没有按照你期望的方式工作。
  • 好的,我再试一次。感谢您的反馈。

标签: firebase google-cloud-firestore firebase-security


【解决方案1】:

这个问题有点笼统,所以让我提供一个广泛的建议。

从结构开始

users
   uid_0
      name: "Hank"
   uid_1
      name: "Frank"
   uid_2
      name: "Lenny"

假设用户可以制作文档并与他人共享

documents
   doc_0
      title "hanks document"
      owner: uid_0

Hank 与 Frank 共享他的文档,因此更新确定哪些用户可以访问哪些文档的节点:

shared_rules
   uid_0
       doc_0
          shared_with
             uid_1: true

在这种情况下,当 Hank (uid_0) 与 Frank (uid_0) 共享文档时,会将一个孩子添加到 uid_0 的 shared_rules 中。我们使用文档 ID 作为键,以便规则知道它是哪个文档。

只有 uid_0 可以写入该节点,但其他人可以从中读取,规则将简单地验证 uid_0/doc_0/shared_with/uid_1 是否存在,如果存在,则允许 uid_1 读取 doc_0。如果不是,则不允许读取。

还有大约 100 个其他选项,但也许这将为您的用例指明正确的方向。

【讨论】:

  • 感谢您抽出宝贵时间回答。我会研究这种方法,非常有用的想法,我刚刚习惯了 firebase。
猜你喜欢
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多