Как вы сказали, есть две широкие возможности:
- Проверка перемещения в правилах безопасности.
- Проверка перемещения в облачных функциях.
Поскольку правила безопасности близки к завершению по Тьюрингу, вы можете выразить в них практически любые требования. Но по мере того, как ваши правила игры становятся более сложными, вы увидите уменьшение отдачи от реализации вашей игровой логики. Декларативный характер правил безопасности просто трудно большинству из нас понять правильно.
Так что для более сложных правил игры я обычно предпочел бы, чтобы код применял их в форме облачных функций. Таким образом, в этом случае:
- Клиент записывает «ход игры» в базу данных.
- Структура этого хода игры подтверждается правилами безопасности.
- Операции записи запускают облачную функцию.
- Эта облачная функция интерпретирует ход игры и обновляет игровое состояние.
- Все клиенты затем видят новое игровое состояние.
Игра Дуга Стивенсона из Firebase - хороший доклад, демонстрирующий этот подход на Google I / O 2017: Архитектура для борьбы с данными в мире реального времени с Firebase . Хотя он использует базу данных Firebase Realtime там (так как Firestore еще не был выпущен), такой же подход применяется к Cloud Firestore.