【发布时间】:2021-08-01 04:41:21
【问题描述】:
我想要一个 Firestore 安全规则功能,我可以使用它来检查特定文档字段 (request.resource.data.<some_field_name>) 的传入数据是否属于特定类型,例如string.
通过简单示例解释用例
对于名为firstName 的特定字段,可以这样轻松完成:
rules_version = '2'
service cloud.firestore {
match /users/{uid} {
allow read
allow write: if isString()
}
}
function isString() { return request.resource.data.firstName is string }
什么在实践中有效但不实用
但是,我必须在函数内部硬编码firstName,因此该函数不是通用的,即,如果我还想检查此文档上是否有其他字段,例如lastName 属于 string 类型,除了这次我硬编码 lastName 之外,我必须再次拥有基本相同的功能:
function isString() { return request.resource.data.lastName is string } 然后相应地重命名函数,所以我最终得到这样的结果:
rules_version = '2'
service cloud.firestore {
match /users/{uid} {
allow read
allow write: if firstNameisString() || lastNameisString()
}
}
function firstNameisString() { return request.resource.data.firstName is string }
function lastNameisString() { return request.resource.data.lastName is string }
我想做什么
但我真正想要的是我可以提供fieldName作为参数这样我就可以做到这一点,从而不必为我想验证的每个字段名重复代码但是真的只有一个功能用于 n 个字段名称:
rules_version = '2'
service cloud.firestore {
match /users/{uid} {
allow read
allow write: if isString(fieldName)
}
}
function isString(fieldName) { return request.resource.data.fieldName is string }
我是否遗漏了一些非常明显的东西,或者为什么由于 firebase 控制台或规则模拟器不允许这种语法是不可能的?
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security