繁体   English   中英

Firebase / Firestore如何存储用户数据

[英]Firebase / Firestore how to store user data

我有一个项目,用户可以在其中创建“公司”并邀请其他用户加入该公司。

我的 Firestore 数据库如下所示:

消防公司

在每家公司中,存储公司名称和所有者 (Google uid)。

此外,在每个公司中都有子集合,其中包含有关公司的更多数据。 例如,受邀加入公司的用户可以查看和编辑任务。

在此处输入图像描述

当前有一个“用户”集合,其中存储了所有用户。 如果用户被邀请到一家公司,它将存储在“用户”子集合“公司”中:

在此处输入图像描述

match /companies/{compId} {
  function hasUserJoinedTheCompany() {
    return exists(/databases/$(database)/documents/users/$(request.auth.uid)/companies/$(compId));
  }
    
  allow read: if hasUserJoinedTheCompany();

  ...
}

有了这种结构和规则,用户只能访问他被邀请的公司的数据。

在我的前端它看起来像这样:

用户可以在左上角的(他被邀请的)公司之间切换。 并以蓝色突出显示,他看到了当前所选公司的“任务”。

在此处输入图像描述

我的问题:我想创建一个列出公司所有用户的页面。

根据我目前的结构,我不知道如何让它发挥作用。

我正在考虑将用户放入“公司”(/companies/{companyId}/users/) 的子集合中。 这样很容易列出公司中的所有用户。 但是我不知道如何列出用户被邀请的所有公司(在最后一个屏幕截图中以红色标记)。

有没有 firebase 功能的解决方案?

这是许多开发人员在开始使用非 SQL 数据库时遇到的问题。 您可以/应该将相同的数据存储两次。 在 SQL 数据库中,我们都被迫link数据,而不是将任何内容存储两次或更多次。 在非 SQL 数据库中,您可以而且有时您真的应该这样做。 在您的情况下,您绝对可以将数据存储在 3 个地方:

  • users集合中的所有用户
  • companies/{id}/users集合中公司的用户
  • 用户登录到users/{id}/companies集合的公司

这样您就可以非常轻松地查询所需的所有数据并编写非常简单的数据库规则来确保一切安全。 它甚至可以使自动sync通过云功能变得更加容易,因为您知道公司何时更改为哪些用户更新数据以及用户是否更改为哪些公司更新用户数据。

我建议只将name等基本数据保存在那里,如果显示在列表中,还可以保存一些额外的数据。 但要避免在所有地方保存完整的用户数据和完整的公司数据。 所有这些只是让您准确、轻松地了解属于何处的link ,并非常容易地获取主要数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM