Firebase规则函数支持三元运算符与动态路径吗?
Firebase规则函数的三元运算符与动态路径支持问题
1. 三元运算符的支持情况
Firebase规则的表达式语言完全支持三元运算符,你代码中let path = request.auth.token.userType == 'user' ? 'data-user-professional' : 'data-admins-professional'这类写法是合法且常用的。它能简洁地根据条件返回不同值,适合在规则中处理动态分支判断,比如路径选择、权限逻辑区分等场景。
2. 基于用户ID的动态路径支持情况
这种实现方式是被支持的。你通过三元运算符动态生成path变量,再将其拼接进get()的路径中,符合Firebase规则的语法要求。不过需要注意几个细节:
- 确保
userId、clientId等变量在当前规则上下文里可正确获取(比如从请求路径参数、用户认证信息中提取) - 使用
get()读取其他文档时,要控制读取次数,避免因过度依赖外部文档导致规则执行超时 - 建议先通过
exists()判断目标文档是否存在,再调用get(),防止因文档不存在引发错误
修正后的代码示例(还原HTML转义的&&)
function externalNestedProfessionalKeysCreate(requestResource) { let requiredFields = ['id', 'name', 'days', 'metaData','dragAndDrop', 'subNote']; let optionalFields = ['sectorSplit']; let allFields = requiredFields.concat(optionalFields); let path = request.auth.token.userType == 'user' ? 'data-user-professional' : 'data-admins-professional' return requestResource.keys().hasOnly(allFields) && get(/databases/$(database)/documents/$(path)/$(userId)/clients/$(clientId)).data.colCount <= 2 }
内容的提问来源于stack exchange,提问作者Richardson
相关产品推荐
相关产品推荐

