用于在用户之间共享数据的 Firestore 安全规则

Posted

技术标签:

【中文标题】用于在用户之间共享数据的 Firestore 安全规则【英文标题】:Firestore security rules to share data between users 【发布时间】:2021-01-19 11:54:11 【问题描述】:

假设我想创建一个允许用户管理购物清单的应用。用户应该能够与其他用户共享他的购物清单,但未被“邀请”的用户不应访问此数据。

如果我想在不共享数据的情况下实现这一点,我可以很容易地保护用户数据:

service cloud.firestore 
  match /databases/database/documents 
    match /users/userId/list 
      allow read, update, delete: if request.auth != null && request.auth.uid == userId;
      allow create: if request.auth != null;
    
  

但我如何确保“受邀”用户也能够读取和写入这些文档?

数据将按如下方式存储:

- Collection: Lists
    - Subcollection: Items

List 文档可能需要跟踪允许哪些用户添加或删除Items

【问题讨论】:

您打算如何声明“受邀”用户?在文档的列表中?作为集合中的文档? 我想这将取决于安全规则的实施,但我已经更新了我的问题。 【参考方案1】:

在如下所示的子集合中声明受邀用户 /users/userId/list/invited/userId

在 Firestore 规则中,您可以检查受邀用户子集合中是否存在具有用户 ID 的文档。

service cloud.firestore 
  match /databases/database/documents 
    match /users/userId/list 
      allow read, write: if request.auth != null && exists(/databases/$(database)/documents/users/$(userId)/list/invited/$(request.auth.uid));
    
  

【讨论】:

以上是关于用于在用户之间共享数据的 Firestore 安全规则的主要内容,如果未能解决你的问题,请参考以下文章

用于将数据从共享托管网页写入 Firebase Firestore 的 Web 应用

为啥 firebase_firestore 安全规则不适用于文档读取

Firestore如何在回收站视图中从firestore检索数据

匿名身份验证用户的这个 Firebase/Firestore 安全规则是不是安全?

Firestore - 用于为每个用户设置数据的逻辑集合架构?

以下场景的正确 Firestore 安全规则是啥?