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

时间:2018-06-18 18:40:08

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

在我的客户端,我正在创建一个包含其中一个字段的文档" 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());
    }     
  }
}

这会拒绝访问。

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /billing/{userId}{
        allow create: if (request.resource.data.createdDateTimeFormat < request.time);
    }     
  }
}

1 个答案:

答案 0 :(得分:3)

request.time的类型为Timestamp,您可以在rules reference documentation中看到,但您将其用作数字。

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

如果您必须将其保留为数字,则必须将allow create: if (request.resource.data.createdDate < request.time.toMillis()); 时间戳对象转换为与您的号码测量值匹配的数字。如果您的号码以纪元为单位以毫秒为单位进行衡量,则可以使用toMills()方法:

onChangeText