首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有通配符的防火墙安全规则(即使授予了访问权限,也拒绝了权限)

带有通配符的防火墙安全规则(即使授予了访问权限,也拒绝了权限)
EN

Stack Overflow用户
提问于 2021-08-19 04:30:27
回答 1查看 142关注 0票数 0

下面是我的消防站数据库

消息子集合如下所示:

下面是我的安全规则。

代码语言:javascript
复制
match /channels/{channelID=**} {
    allow read: if request.auth.uid in resource.data.participants;
    allow write: if request.auth.uid in resource.data.participants;

但是,当我尝试使用下面的代码侦听消息集合中的消息文档时

代码语言:javascript
复制
firestore.collection('channels').doc(channelId).collection('messages').snapshots()

我收到以下错误:

cloud:

_firestore/权限被拒绝,调用方没有执行指定操作的权限。8.3.0 - Firebase/Firestore在channels/RILvs2HvV8OiYrsk0W0ZxhxaU8H3-EpPAVCmuYnTWGxvASNk5rgUHTe63/messages上侦听查询失败:缺少或没有足够的权限。

我允许访问安全规则中的所有子集合和文档,但我不确定为什么仍然拒绝允许?如有任何建议,将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-19 04:54:38

问题在于,您正在尝试读取messages子集合中的文档,因此resource.data将是这些消息文档的数据,而不是通道文档。然而,participants数组存在于通道文档中,因此请使用get()来读取该文档的数据,如下所示。

代码语言:javascript
复制
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}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68842070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档