如何在Firestore Rules中从请求路径提取所需数据
问题原因
你之前的两种实现均不生效,核心是Firebase安全规则里的所有路径字符串都会以斜杠/开头,调用split('/')分割后第一个元素是空字符串,自然无法匹配到databases。
正确实现方案
方案1:修正分割后的索引取值
直接调整取数组的下标即可,代码如下:
function test() { // 调整索引为1,跳过分割后开头的空字符串 return request.path.split('/')[1] == 'databases'; } match /posts/{document} { allow update: if test(); // ...其余规则 }
方案2:使用安全规则内置路径API(更推荐)
Firebase安全规则提供了原生的path()方法解析路径,不需要手动处理字符串分割的边界问题,代码更稳定:
function test() { // path方法会自动解析路径为分段数组,直接从索引0开始取有效分段即可 return path(request.path)[0] == 'databases'; }
补充说明
如果你的校验逻辑需要用到当前match块对应路径的分段,更建议直接在match规则中定义变量捕获,比如你示例里的match /posts/{document},后续规则中可以直接使用document变量拿到当前文档ID,无需手动解析路径。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

