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 «создать» правило исключительно?