Firebase Cloud Firestore Правила безопасности для updateData FieldValue.delete () [swift] - PullRequest
0 голосов
/ 29 февраля 2020

Я удаляю элемент карты в поле «Тест».

Удаление ключа «myID» из «Теста»

self.db.collection("events").document("bkxREqn24JpdKYBLnBio").updateData([
            "Test.myID": FieldValue.delete(),
        ]) { err in
            if let err = err {
                print("Error updating document: \(err)")

            } else {
                print("Document successfully updated")

            }
        }

Как получить ключ элемента что я уберу в "правилах безопасности"? Это не так:

service cloud.firestore {
  match /databases/{database}/documents {
    match /events/{eventID} {
      allow write, update : if  request.resource.data.Test.keys()[0] == "myID"
    }
  }
}

, хотя это правило работает для записи

self.db.collection("events").document("bkxREqn24JpdKYBLnBio").updateData([
            "Test.myID": "MyText",
        ]) { err in
            if let err = err {
                print("Error updating document: \(err)")

            } else {
                print("Document successfully updated")

            }
        }

1 Ответ

0 голосов
/ 29 февраля 2020

Если я правильно понимаю, вы хотите разрешить запись, только если новый документ все еще содержит значение myID в поле Test, которое является массивом.

Это было бы в безопасности правила:

allow write, update : if "myID" in request.resource.data.Test;

Если вы хотите проверить, добавляется ли myID, вы сравните request.resource.data с resource.data. Так что-то вроде:

allow write, update : if   "myID" in request.resource.data.Test 
                      && !("myID" in resource.data.Test);
...