Я изменил правила безопасности для облачного хранилища, чтобы предотвратить воссоздание документа в коллекции. Вот правила, которые я использовал:
match /UserData/{uid}/DAILY_USAGES/{day} {
allow create: if !exists(/databases/$(database)/documents/UserData/$(request.auth.uid)/DAILY_USAGES/$(day));
allow read, update: if request.auth.uid == uid;
}
Я смоделировал эти правила в консоли с этим путем к документу и учетными данными пользователя
/UserData/UoeJtUhPpJTi78HouKLIqhcRpfs48/DAILY_USAGES/09-07-2020
Если я создам документ с идентификатором 09-07- 2020 и смоделировать с указанным выше путем, это не удается. Когда я удаляю документ 09-07-2020, то симуляция выше работает. Так что это хорошо работает в симуляторе правил.
Но когда я пытаюсь выполнить это в приложении, каждый раз, когда я пытаюсь, он снова создает документ. Поэтому, если содержимое документа было другим раньше, оно сбрасывается до значения по умолчанию, которое я использовал для создания документа.
Вот код, который я использовал в android studio для создания этого документа только один раз
DailyUsage usage = new DailyUsage();
usage.setUsage(0);
usage.setTime(formatDate(date));
FirebaseFirestore.getInstance().collection(Constants.USER_DATA_ROOT).document(uid)
.collection(Constants.FIRESTORE_CHILD_DAILY_USAGES).document(today).set(usage);
Я не хочу проверять, существовал ли документ раньше, потому что он замедляет работу пользовательского интерфейса и работает не так, как я ожидал. Поэтому я попытался использовать правила безопасности, чтобы предотвратить воссоздание документов, но не работал с приложением. Может ли кто-нибудь помочь в этом?