Firestore 规则:当数据为数字时,条件检查失败

Asi*_*f M 4 firebase firebase-security google-cloud-firestore

以下是当条件中使用的文档字段的数据类型为 number- 时失败的示例规则:

match message_box/{user_id}/inbox {
      allow read: if get('..../users/$(request.auth.uid)).data['user_id'] == user_id
}
Run Code Online (Sandbox Code Playgroud)

此规则总是失败,因为在数据中字段值是数字,但在路径变量 {user_id} 中它被捕获为字符串。

以下两项测试证实这是一个实际问题 -

  1. 在规则中,通过在比较的右侧使用硬编码的整数值(例如data['user_id'] == 456),然后读取成功。或者-
  2. data中,将user_id字段的数据类型设置为string。在这种情况下,本文顶部指定的匹配规则会成功。

有什么简单的方法可以顺利运行吗?在规则文档中没有看到将 int 转换为 string 的方法。

Jer*_*myW 6

这个问题在这里被引用。

如果将来有人遇到此问题,请查看以下有关在 Firestore 规则中转换数据类型的文档:

字符串 -> 整数

整数 -> 字符串

例子:

int("2") == 2
int(2.0) == 2

string(true) == "true"
string(1) == "1"
string(2.0) == "2.0"
string(null) == "null"
Run Code Online (Sandbox Code Playgroud)