Firestore安全规则允许读取但不能创建

时间:2018-06-21 22:20:44

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

我有一个称为“读数”的顶级收藏。读数中的每个文档都有一个名为“ PatientUid”的字段。

我有以下安全规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }

    //Takes a uid and returns true if it's the uid of the current user
    function isTheUidOfCurrentUser(uid) {
        return request.auth.uid == uid;
    }

    //A patient or one of their doctors can view their readings
    match /readings/{reading} {
        allow read, write: if isTheUidOfCurrentUser(resource.data.patientUid);
    }

  }
}

当前,如果用户正在阅读其中一个读数,则一切都很好,但是由于某种原因,用户无法创建读数。最奇怪的是,在尝试创建读数时,控制台中的模拟器甚至没有显示匹配的规则。

我在这里做错了什么。为什么该规则仅在读取时才匹配,而在写入时不匹配?

1 个答案:

答案 0 :(得分:0)

问题在于resource.data在写发生之前代表了文档。因此,在创建文档时,resource.data没有PatientUid字段。

一旦我更改

resource.data.patientUid

request.resource.data.patientUid

之所以有效,是因为request.resource表示写入后文档将是什么。