Firestore权限规则问题:如何允许读取不存在的文档?
解决Firestore读取不存在文档的权限规则问题
你遇到的问题核心是规则里的路径变量引用错误,导致exists函数无法正确判断目标文档是否存在。
问题分析
你原来的规则中,exists函数的路径写了/databases/$(database)/documents/reports/{report},这里的{report}是匹配模式的语法,不能直接用在字符串路径里,必须用$(report)来引用之前匹配到的变量,否则Firestore无法解析到正确的文档路径,自然会返回权限不足的错误。
修正后的规则
把路径里的{report}改成$(report),规则就能正常工作了:
service cloud.firestore { match /databases/{database}/documents { match /reports/{report} { allow read: if !exists(/databases/$(database)/documents/reports/$(report)); } } }
这个规则的逻辑是:仅当请求的/reports/{report}文档不存在时,允许读取操作。
额外说明
这里要提醒你:这个规则只允许读取不存在的文档,如果目标文档实际存在,用户会被拒绝访问。如果你的需求是无论文档是否存在都允许读取,那可以简化规则为:
allow read: if true;
如果需要更复杂的逻辑(比如文档存在时需要满足其他权限条件,不存在时允许读取),可以这样写:
allow read: if !exists(/databases/$(database)/documents/reports/$(report)) || [你的存在时权限判断条件];
内容的提问来源于stack exchange,提问作者DauleDK
相关产品推荐
相关产品推荐

