firebase.google.com/support/contact

ользую Android-клиент для создания нового документа.

Map<String, Object> city = new HashMap<>();
city.put("name", "Los Angeles");
city.put("state", "CA");
city.put("country", "USA");

db.collection("cities").document("LA")
        .set(city)
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                Log.d(TAG, "DocumentSnapshot successfully written!");
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error writing document", e);
            }
        });

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /cities/{city} {
      allow create: if (request.auth.uid != null);
      allow update: if (request.auth.uid != null) && !("country" in request.writeFields) );
    }
  }
}

Как видно из правил безопасности, обновление может происходить только в том случае, если документ не содержит поля «страна». Создать правило просто.

В этом примере у меня нет документа «LA» в коллекции, и когда я его тестирую, я получаю ошибку PERMISSION DENIED. Тонкая настройка правила обновления подтверждает, что .set () вызывает правило обновления.

Как мне сделать .set call «создать» правило исключительно?

Ответы на вопрос(0)

Ваш ответ на вопрос