reactjs - Firestore 安全规则如何检查文档是否由用户创建(是所有者)

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

我有一个包含两个集合的 firestore 数据库:“notes”,其中每个文档存储每个注释的内容和 authorId(对应于当前登录的用户 uid),以及“users”,其中存储用户,每个文档的id是用户的uid。这样,笔记的作者就连接到了 firestore 中的用户。 我正在尝试制作一个 Web 应用程序,其中仅显示用户创建的注释(authorId == uid),而其他注释则不显示。

我尝试将 resource.data.authorId 和 request.resource.data.authorId 与 request.auth.uid 进行比较。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /notes/{note}{
        allow read: if request.auth.uid == resource.data.authorId;
    }
  }
}

我只想显示用户创建的笔记,但根据此规则根本不显示任何笔记。

最佳答案

我的快速猜测是您的代码试图从集合中读取所有文档,并且您希望安全规则过滤数据。这不是 Firebase 安全规则的工作方式。它们不会自行过滤数据,而只是检查以确保允许任何读取操作。

这意味着只允许安全访问用户自己创建的文档,您需要:

  1. 编写查询代码以仅请求用户自己创建的文档。
  2. 编写安全规则,然后验证是否只允许此类查询。

您的安全规则似乎是第二位的,所以您需要做的就是将该查询也写入您的应用程序代码中。

有关此的更多信息,请参阅 documentation on securely querying data .

关于reactjs - Firestore 安全规则如何检查文档是否由用户创建(是所有者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57684247/

相关文章:

ios - 如何运行 React-Native 示例?

reactjs - 我无法使用 Glamorous 设计 React-router-dom 链接

ios - 数据服务错误未解决

Firebase 为用户设置角色

swift - 如何在自定义类中使用 Firebase?

javascript - React Native - 授予权限后切换到其他屏幕

javascript - Webpack 包未导出且无法导入

android - 向/从 Google Cloud Firestore 上传和下载文件

java - 在 Firestore Java 管理 SDK 中未收到有关网络断开和重新连接的文档更新

java - 如何在RecyclerView Item中的populateViewHolder中设置addSnapshotListener和remove?