如何在Firestore安全规则中使用时间戳记

时间:2018-09-05 15:41:31

标签: firebase google-cloud-firestore firebase-security-rules

想象一下存储在文档中的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

Screenshot from Firebase Console

测试项目

Stored data Rules simulator

2 个答案:

答案 0 :(得分:2)

这里有两个不相关的问题,但本质上是Firstore规则模拟器中的错误。

首先,request.time当前未被模拟。不幸的是,试图对此进行评估的规则会立即被拒绝,而不是向您显示一条消息,指出它不受支持。

第二,文档中应在“时间戳记”类型字段上使用的“时间戳记”对象方法已损坏。当前,时间戳字段作为没有任何方法的“空对象”发送到模拟器,因此您无法在模拟器中使用它们的值。

对于这两种情况,发布的规则都可以正常工作。

答案 1 :(得分:-2)

请参见rules.timestamp

  

rules.timestamp

     

全球可用的时间戳功能。访问这些功能   使用时间戳记。前缀。

     

value(epochMillis)返回规则。时间戳

从一个纪元时间开始,以毫秒为单位。

因此,将其包装在value( )