基于Firebase firestore时间戳的安全规则

基于Firebase firestore时间戳的安全规则,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,在我的客户端,我正在使用createdDate字段之一创建一个文档 下面是firestore模拟器的有效载荷 { "__name__": "/databases/(default)/documents/billing/aaaa", "data": { "createdDate": 1529237500239, "createdDateTimeFormat": "2018-06-12T07:00:00.000Z" } } 我试图设置安全规则,以确保createdDat

在我的客户端,我正在使用createdDate字段之一创建一个文档

下面是firestore模拟器的有效载荷

{
  "__name__": "/databases/(default)/documents/billing/aaaa",
  "data": {
    "createdDate": 1529237500239,
    "createdDateTimeFormat": "2018-06-12T07:00:00.000Z"
  }
}
我试图设置安全规则,以确保createdDate不会出现在将来

service cloud.firestore {
  match /databases/{database}/documents {
    match /billing/{userId}{
        allow create: if (request.resource.data.createdDate < request.time.toMillis());
    }     
  }
}
这使得访问被拒绝

接下来,我尝试了以下引用时间戳格式的规则。这也使得访问被拒绝

service cloud.firestore {
  match /databases/{database}/documents {
    match /billing/{userId}{
        allow create: if (request.resource.data.createdDateTimeFormat < request.time);
    }     
  }
}
从中可以看到,request.time是一种类型,但您将其用作数字

你有两个选择。首先,您可以将createdDate字段更改为时间戳类型的对象,这可能是更好的方法

如果必须将其保留为数字,则必须将request.time Timestamp对象转换为与数字度量值匹配的数字。如果从历元开始以毫秒为单位测量数字,则可以对其使用以下方法:

allow create: if (request.resource.data.createdDate < request.time.toMillis());

我将createdDate保留为一个数字,并尝试