为了账号安全,请及时绑定邮箱和手机立即绑定

Firestore 规则匹配父数据,仅适用于模拟器

Firestore 规则匹配父数据,仅适用于模拟器

慕沐林林 2021-11-18 21:19:23
我正在尝试制作一个简单的直接消息部分。我有一个包含一些元信息的文档和一个包含单个消息的子集合。当我尝试获取消息时,规则在模拟器中有效,但在 js 中我每次都得到:Uncaught (in promise) FirebaseError: Missing or enough permissions。mongodb结构:聊天室元信息(senderId/Name、recieverId/Name、时间戳等)消息姓名文本时间戳消息标识房间号规则:match /chatRooms/{chatRoom}  {  allow create: if request.auth.uid != null;  allow update, delete: if resource.data.uid == request.auth.uid;     function isChatPartner() {   return parentDoc().receiverId == request.auth.uid || parentDoc().senderId == request.auth.uid;  }  function parentDoc() {    return get(/databases/$(database)/documents/chatRooms/$(chatroom)).data;  }  match /messages/{message} {    allow read: if isChatPartner();  }}js请求:db.collection("chatRoom").doc(_roomId).collection("messages").get().then(msg => {   console.log(msg);})有谁知道可能有什么问题?
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

您的数据库和规则不匹配。在规则中,顶级集合称为“chatRooms”,但在您的代码中,它称为“chatRoom”。集合名称需要完全匹配。

还有一个问题。您的代码正在尝试获取子集合中的所有文档,但规则不允许这样做。规则正在检查某些字段的访问权限。这在安全规则中不起作用,因为规则不是过滤器(请务必阅读并理解这些文档)。查询只能请求肯定会通过规则的文档 - 规则不会检查每个文档并排除不匹配的文档。


查看完整回答
反对 回复 2021-11-18
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信