Firestore安全规则是否支持对字段名(键)使用正则表达式匹配?
Firestore安全规则支持对字段名(键名)使用正则表达式匹配,但你之前的写法存在语法错误,需要调整。
错误原因说明
request.resource.data.keys()返回的是字段名组成的列表类型,request.resource.data本身是Map类型,这两种类型都没有内置的matches()方法。matches()是字符串类型专属的方法,因此你尝试的两种写法都无法生效。
正确写法
你可以先获取所有字段名的列表,再遍历每个键逐一做正则匹配,分两种常用场景:
- 校验所有字段名均符合正则规则
如果要确保请求携带的所有字段名都匹配指定正则,使用列表的all()方法:
// 示例:限制所有字段名只能由小写字母、数字、下划线组成 allow write: if request.resource.data.keys().all(key => key.matches('^[a-z0-9_]+$') );
- 校验存在至少一个符合正则规则的字段名
如果要判断请求中是否存在匹配指定正则的字段,使用列表的any()方法:
// 示例:允许携带任意以username开头的字段 allow write: if request.resource.data.keys().any(key => key.matches('^username.*$') );
常用场景示例
// 示例:仅允许修改前缀为public_的字段,以及系统内置的create_time、update_time字段 allow update: if request.resource.data.keys().all(key => key.matches('^public_.*$') || key in ['create_time', 'update_time'] );
内容的提问来源于stack exchange,提问作者nth-child
相关产品推荐
相关产品推荐

