带有 hasAny 的 Firestore 规则不起作用

问题描述 投票:0回答:1

我有以下 Firestore 规则,但不起作用:

allow read: if (get(resource.data.chat).data.users).hasAny(get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admins)

我想要的是有一个消息集合和一个聊天集合。消息文档具有对聊天文档的引用,并且该聊天文档具有一系列用户文档引用。用户还有一个名为 admins 的字段,它也是用户文档引用的列表。现在,如果聊天的用户字段中的任何用户位于该用户的管理员字段中,我希望发送请求的用户能够读取消息文档。 这应该有效,但我仍然收到权限被拒绝的错误。 为什么会这样?

flutter firebase google-cloud-firestore firebase-security
1个回答
0
投票

您在客户端执行的查询是什么?也许您没有使用 where 子句正确过滤它。请记住,[安全规则不是过滤器][1]https://firebase.google.com/docs/firestore/security/rules-query,因此如果您的查询可能返回不允许读取的文档,则整个查询将失败并出现“权限缺失或不足”错误。

如果你过滤得当,那我不知道。我有一个关于 hasAny 和数组作为变量的类似问题,我不知道你的和我的是否相关。你能解决吗?

我的问题:Firestore 规则 get() 在模拟器中工作,但在应用程序中不起作用

© www.soinside.com 2019 - 2024. All rights reserved.