想象一下存储在文档中的timestamp
类型的值。
allow update: if resource.data.customTimestamp.toMillis() == request.time.toMillis()
上面的代码不起作用,并引发以下错误:
找不到功能错误:名称:[toMillis]。
如果我这样转过身来:
allow update: if request.time.toMillis() == resource.data.customTimestamp.toMillis()
数据访问被拒绝:
拒绝模拟数据访问
这让我很困惑。
如何将Firestore timestamp
解析为Security Rules Timestamp
?
答案 0 :(得分:2)
这里有两个不相关的问题,但本质上是Firstore规则模拟器中的错误。
首先,request.time
当前未被模拟。不幸的是,试图对此进行评估的规则会立即被拒绝,而不是向您显示一条消息,指出它不受支持。
第二,文档中应在“时间戳记”类型字段上使用的“时间戳记”对象方法已损坏。当前,时间戳字段作为没有任何方法的“空对象”发送到模拟器,因此您无法在模拟器中使用它们的值。
对于这两种情况,发布的规则都可以正常工作。
答案 1 :(得分:-2)
请参见rules.timestamp。
rules.timestamp
全球可用的时间戳功能。访问这些功能 使用时间戳记。前缀。
value(epochMillis)返回规则。时间戳
从一个纪元时间开始,以毫秒为单位。
因此,将其包装在value(
)