reactjs - Firestore 安全规则如何检查文档是否由用户创建(是所有者)
问题描述
我有一个包含两个集合的 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 安全规则的工作方式。他们不会自己过滤数据,而只是检查以确保允许任何读取操作。
这意味着只允许安全访问用户自己创建的文档,您需要:
- 编写查询代码以仅请求用户自己创建的文档。
- 编写安全规则,然后验证只允许这种类型的查询。
您的安全规则似乎是第二位,所以您需要做的就是将该查询写入您的应用程序代码。
有关这方面的更多信息,请参阅有关安全查询数据的文档。
推荐阅读
- python - 如何在保留评论/样式的同时映射 CommentedMap?
- google-apps-script - 如何使用 MailApp.sendEmail 发送整张工作表
- pandas - 合并 2 个 DataFrame 并总结其中一列
- javascript - 在反应中删除
- sql - 从 sp_BlitzIndex 我看到“表元数据不在内存中” - 这实际上是什么意思?
- idris - 编译器在使用返回依赖对的函数时引入了额外的接口要求
- javascript - 表单提交在 ios 设备上不起作用
- rust - 使用 Serde 反序列化时如何忽略额外的元组项?(“尾随字符”错误)
- sharepoint-online - 难以让“列出组成员”在 Microsoft Flow 中返回正确的 Sharepoint 组信息
- ffmpeg - libx264 和 h264_nvenc 有什么区别?