Google Firestore предоставляет возможность атомарного выполнения многих операций, как показано здесь . Я изо всех сил пытаюсь найти информацию о том, когда проверка прав доступа выполняется для каждой операции. Вот как будет выглядеть типичный вызов функции batch
, например, в Kotlin:
val db = Firebase.firestore
val batch = db.batch()
db.collection("cities")
.whereEqualTo("haveVisited", true)
.get()
.addOnSuccessListener { cities ->
for (city in cities) {
batch.delete(db.collection("cities").document(city.id))
}
batch.commit()
.addOnSuccessListener { result ->
// Our delete worked
}
}
Выше приведен простой пример, когда мы ставим в очередь все операции удаления и выполняем их сразу. В этом случае я считаю, что там, где выполняется проверка разрешений в соответствии с набором правил Firestore, либо во время batch.delete()
, либо во batch.commit()
, это несущественно.
Однако давайте рассмотрим пример, в котором мы пытаемся удалить несколько документов, некоторые из которых полагаются на другие во время проверки разрешений для определения разрешений. Скажем, у вас есть коллекция городов выше, а затем у вас также есть коллекция городов, каждый из которых ссылается на город. Несколько городов могут ссылаться на один и тот же город.
- Вы хотите удалить город; поэтому вы также должны удалить все города, которые ссылаются на город
- Только мэр (администратор) города может удалить города и города; таким образом, проверка прав доступа для удаления каждого города должна проверить коллекцию городов, чтобы определить, является ли пользователь мэром
Но тогда все удаления происходят одновременно. Таким образом, в этом случае проверка разрешений должна иметь , которые должны быть выполнены до того, как произойдет какая-либо из операций. Кроме того, пользователь должен иметь разрешения для каждой операции, иначе все не получится.
Я полагаю, что это так, но я не могу найти никаких ресурсов, чтобы полностью подтвердить мои выводы. Любое руководство приветствуется.