Firestore安全规则如何仅在指定文档存在时允许操作?
问题排查点
- 首先确认你用来测试写入操作的账号,自身对应的admin文档路径是否正确:你写的
exists(/databases/$(database)/documents/profiles/$(request.auth.uid)/roles/admin)是检查请求发起者自己的profiles/[当前用户uid]/roles/admin文档是否存在,不是检查你要修改的目标用户的admin文档。你要确认测试账号自己的该路径下确实存在admin文档,而不是只有你要修改的目标用户有该文档。 - 确认数据结构匹配规则逻辑:你的admin标识必须是
roles子集合下的名为admin的独立文档,不能是profiles文档内的roles嵌套字段里的admin属性,如果是后者你需要把判断逻辑改成get(/databases/$(database)/documents/profiles/$(request.auth.uid)).data.roles.admin == true。 - 检查路径大小写:Firestore路径、集合名、文档名都是大小写敏感的,确认你的集合名是
roles、文档名是admin完全匹配,没有大小写拼写错误。 - 可以使用Firebase控制台自带的「规则游乐场」工具模拟写入请求,填写对应的用户UID后可以直接看到
isAdmin()函数的每一步返回结果,快速定位是request.auth为空还是exists判断返回假。
内容的提问来源于stack exchange,提问作者J4N
相关产品推荐
相关产品推荐

