Разрешения пакетной операции Firestore - PullRequest
1 голос
/ 22 апреля 2020

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(), это несущественно.

Однако давайте рассмотрим пример, в котором мы пытаемся удалить несколько документов, некоторые из которых полагаются на другие во время проверки разрешений для определения разрешений. Скажем, у вас есть коллекция городов выше, а затем у вас также есть коллекция городов, каждый из которых ссылается на город. Несколько городов могут ссылаться на один и тот же город.

  • Вы хотите удалить город; поэтому вы также должны удалить все города, которые ссылаются на город
  • Только мэр (администратор) города может удалить города и города; таким образом, проверка прав доступа для удаления каждого города должна проверить коллекцию городов, чтобы определить, является ли пользователь мэром

Но тогда все удаления происходят одновременно. Таким образом, в этом случае проверка разрешений должна иметь , которые должны быть выполнены до того, как произойдет какая-либо из операций. Кроме того, пользователь должен иметь разрешения для каждой операции, иначе все не получится.

Я полагаю, что это так, но я не могу найти никаких ресурсов, чтобы полностью подтвердить мои выводы. Любое руководство приветствуется.

...