Firestore安全规则:根据时间戳记值添加数据

时间:2018-11-19 08:57:05

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

我要基于强制用户更正其本地计算机日期的安全规则从Firestore读取数据或向Firestore写入一些数据,这应该是正确的,既不是过去也不是未来。如果客户端计算机时间不正确,则他会这样做没有读写数据的能力;

现在我已经尝试使用安全规则

 service cloud.firestore {
 match /databases/{database}/documents {
 match /{document=**} {
  allow read:if true;
  allow create: if (request.resource.data.timestamp == request.time.toMillis());
  }
 }
}

但是它总是显示一条消息,显示权限被拒绝。如何实现??

我的代码是

  batch.set(ref, {
    timestamp: new Date().valueOf(),
    name: formData.name ? formData.name.toLowerCase() : null,
    type: formData.type ? formData.type : 'percentage',
    rate: isNaN(formData.rate) ? 0 : Number(formData.rate),
    date1: formData.date1 ? new Date(formData.date1) : null,
    date2: formData.date2 ? new Date(formData.date2) : null,
    time1: formData.time1 ? formData.time1 : null,
    time2: formData.time2 ? formData.time2 : null,
    id: ref.id,
    createdAt: firebase.firestore.FieldValue.serverTimestamp(),
    typeArray,
    enabledDays: dateArray,
    isActive: true,
    isTotalEnabled: formData.dOnTotal,
  });

预先感谢

1 个答案:

答案 0 :(得分:1)

request.resource.data.timestamp == request.time.toMillis()。给它更多的回旋余地(例如10 s):

math.abs(request.resource.data.timestamp - request.time.toMillis()) < 10000;