下面是我的消防站数据库

消息子集合如下所示:

下面是我的安全规则。
match /channels/{channelID=**} {
allow read: if request.auth.uid in resource.data.participants;
allow write: if request.auth.uid in resource.data.participants;但是,当我尝试使用下面的代码侦听消息集合中的消息文档时
firestore.collection('channels').doc(channelId).collection('messages').snapshots()我收到以下错误:
cloud:
_firestore/权限被拒绝,调用方没有执行指定操作的权限。8.3.0 - Firebase/Firestore在channels/RILvs2HvV8OiYrsk0W0ZxhxaU8H3-EpPAVCmuYnTWGxvASNk5rgUHTe63/messages上侦听查询失败:缺少或没有足够的权限。
我允许访问安全规则中的所有子集合和文档,但我不确定为什么仍然拒绝允许?如有任何建议,将不胜感激。谢谢!
发布于 2021-08-19 04:54:38
问题在于,您正在尝试读取messages子集合中的文档,因此resource.data将是这些消息文档的数据,而不是通道文档。然而,participants数组存在于通道文档中,因此请使用get()来读取该文档的数据,如下所示。
match /channels/{channelId}/messages/{messageId} {
allow read, write: if request.auth.uid in get(/databases/$(database)/documents/channels/$(channelId)).data.participants;
}如果在这里使用递归通配符,那么channelId的值将是"/RILvs2HvV8OiYrsk0W0ZxhxaU8H3-EpPAVCmuYnTWGxvASNk5rgUHTe63/messages/JR12q13OvpYISJmHilcq" (在本例中),但是get()中的路径应该是/channels/{channelId}
https://stackoverflow.com/questions/68842070
复制相似问题