我正在尝试保护数据库,并且希望保护消息。 我的结构是messages / {chatid} / chat / messageArray(聊天对象类似于userid1-userid2)。所以我想检查安全规则,如果chatid包含用户ID。我尝试了一些在模拟器中正常工作的方法,但是我遇到了问题,因为在我的代码中我查询了集合组,并且firestore拒绝访问。我做类似db.collection(“ messages”)。where(“ users”,“ array-contains”,user.uid).onSnapshot ..... 如果有人知道我如何保护邮件数据,那我会很棒。
match /messages/{chatId}/{document=**} {
allow read, write: if chatId.matches('.*'+request.auth.uid+'.*');
}
答案 0 :(得分:0)
您在此处显示的规则与示例查询不匹配。该规则只能匹配邮件集合中文档子集中的文档。您的查询正在尝试立即阅读邮件集中的文档。全局通配符不能不匹配零路径分量。 Only in rules version 2 can a glob wildcard match nothing.
您的选择是在规则的第一行设置rules_version = '2';
,或添加另一个与邮件中的文档匹配的规则,而无需使用全局通配符:
match /messages/{chatId} {
allow read, write: if chatId.matches('.*'+request.auth.uid+'.*');
}
我鼓励您不要尝试匹配chatId
的内容,而应该使用文档的字段。您的查询还应该使用这些字段来过滤查询。这更简单。