首页 > 解决方案 > Cloud Firestore 安全规则 - 仅允许写入文档中的特定密钥

问题描述

我目前正在使用 Firestore 数据库为我的应用程序编写一些规则。目前每个人都可以读取数据,经过身份验证的用户可以写入。

  match /quizzes/{quizId} {
    allow read; 
    allow write: if request.auth != null;
  }

这很好用,但我也希望未经身份验证的用户只写入文档中的特定键。

文档内容示例:

{
  title: 'title',
  plays: 12,
  playedBy: [//Filled with user id's],
  ...
}

有什么方法可以限制未经身份验证的用户只能对 playBy 数组而不是该文档的其他键具有写访问权限?

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


在较早的答案之后(我相信是 2019 年末),Firebase 引入了Map.diff

就像是:

match /quizzes/{quizId} {
    allow read; 
    allow write: if request.auth != null ||
      request.resource.data.diff(resource.data).affectedKeys() == ["playedBy"].toSet()
  }

我使用它的测试代码可以在这里看到。


推荐阅读