Firestore安全规则:如何拒绝访问匹配多规则的--stats--文档?
Firestore安全规则:处理多match匹配下的特定文档访问限制
问题描述
我当前使用的Firestore安全规则如下:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users { match /{userId} { allow get: if true; allow list: if isQueryLimitRespected(20); allow write: if false; } match /--stats-- { allow read, write: if false; } } } }
根据Firestore官方文档说明:
一个文档可能匹配多个match语句。当多个allow表达式匹配请求时,只要任一条件为true就允许访问。
由于--stats--文档同时匹配了/users/{userId}和/users/--stats--两条规则,当前无法拒绝该文档的访问,请问该如何实现?是否无法做到?
解决方案
可以通过以下方式实现对--stats--文档的访问限制:
- 修改通用规则的条件,排除特定文档
在/users/{userId}的规则中,给允许访问的条件加上文档ID不等于--stats--的限制,这样通用规则就不会对--stats--生效,只会触发专门的规则:rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users { match /{userId} { allow get: if userId != '--stats--'; allow list: if isQueryLimitRespected(20); allow write: if false; } match /--stats-- { allow read, write: if false; } } } }
核心逻辑是:Firestore规则只要有一条allow条件满足就允许访问,因此必须确保没有任何规则会允许--stats--的访问。通过在通用规则中排除该文档ID,就能让专门针对--stats--的拒绝规则生效。
内容的提问来源于stack exchange,提问作者Raul
相关产品推荐
相关产品推荐

