【问题标题】:data modeling & security rules advice firebase数据建模和安全规则建议 firebase
【发布时间】:2020-02-19 08:25:44
【问题描述】:

我正在尝试在 firestore 中对 2 个概念进行建模并关联

collection: users
key/document_id: email
document: profile info

collection: topics
key/document_id: random
document: metadata with a field indicating email of user (to use for lookups)

我的目标是

  • 用户中的“参考”主题以便于查找,但不知道该怎么做 它不是一个子集合。
  • 基于将作为身份验证的一部分传递的电子邮件,我希望有安全规则以允许仅在路径、字段上写入集合 基于电子邮件

以上两种方法在 Firebase 中都是可行的。感谢任何指针!

【问题讨论】:

  • 我们通常根据要执行的查询来构建 Firestore 数据库。这些查询是什么?
  • 查询用户资料,根据兴趣查询Feed等话题

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


【解决方案1】:

序言:NoSQL 数据建模中没有一种正确的方法,也只有一种正确的方法

您的方法似乎有效,但我建议进行以下调整:

“在用户中引用主题以便于查找”:

要“参考用户中的主题以便于查找”,您可以在 user 配置文件的数组中复制 topics 的列表。然后,您将能够使用array-contains(和其他array membership 方法)进行查询。 (但请注意 in 运算符的限制)。

这种方法的优点:你只需要查询一个文档就可以得到一个用户的所有主题。可能的缺点:文档(以及单个字段值)的大小有一个限制,最大为 1 MiB(1,048,576 字节),请参阅doc

通过组合batched writearrayUnion()arrayRemove() methods,您可以轻松地使topics 数组和topics 子集合保持同步。


使用用户 ID 而不是电子邮件作为文档 ID 和安全规则:

不要使用电子邮件作为 users 集合文档 ID 并在安全规则中使用它,而是使用用户 ID。请参阅doc 中的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 2016-03-12
    • 1970-01-01
    • 2016-09-16
    • 2016-07-16
    • 2019-03-19
    • 2018-09-03
    • 2018-09-21
    相关资源
    最近更新 更多