Как ограничить лимит запросов Firestore, используя другое значение из документа Firestore? - PullRequest
0 голосов
/ 25 января 2019

У нас есть решение SaaS для спортивных залов и фитнеса.

Есть 3 плана, и каждый спортзал подписан на один. Первый план допускает до 50 участников и является бесплатным, второй от 50 до 500 участников и стоит $ x, а третий 500+ участников и $ y. Планы и количество членов, которые они разрешают, хранятся в коллекции в Firestore.

У нас есть правила безопасности Firestore, которые блокируют запросы с количеством участников, превышающим допустимое в плане. Это потому, что тренажерный зал может перейти на второй план и добавить 150 участников, а затем понизиться до бесплатного. В этом случае можно запросить только 50 членов еще раз.

Несмотря на то, что правило безопасности работает как брелоки, нам не ясно, как правильно реализовать это в клиенте. Клиент является веб-сайтом Vue.js. После загрузки веб-сайта члены спортзала запрашиваются из Firestore и сохраняются в Vuex. При запросе больше, чем разрешено, имеется сообщение о недостаточном разрешении, которое вполне ожидаемо.

Проблема связана с лимитом на запрос пожарного депо на стороне клиента. Количество разрешенных участников соответствует плану, на который подписан тренажерный зал, который хранится в Firestore. Похоже, мы должны запросить это, прежде чем мы просим членов тренажерных залов. Итак, нам нужно: 1. имя плана тренажерного зала; 2. пособие для участников плана, а затем 3. члены спортзала.

Мы довольно скептически относимся к этому, так как он требует 3 запроса на что-то, что должно быть простым. Мы не возражаем против стоимости запроса, а скорее за счет ожидания 3 запросов туда и обратно.

`let membersLimit = this.$store.state.stripePlans[this.$store.state.gymProfilePrivate.stripePlan].membersCount
firestore.collection('_gyms').doc(gymId).collection('_members')
.limit(membersLimit)
.onSnapshot(docs => {
    let members = []
    docs.forEach(doc => {
        let member = doc.data()
        members.push(member)
        this.$store.commit('updateGymMembers', members)
    })
    //do stuff with members
})`

Вещи, которые мы рассматриваем до сих пор.

  1. Запросить первые 50 участников, которые всегда разрешены, и когда и если планы обновляются, запросить общее количество участников в плане тренажерных залов
  2. Дождитесь планов и информации о плане в спортзале, а затем попросите участников в спортзале
  3. Создать облачную функцию для запроса участников спортзала и запретить доступ к участникам спортзала со стороны клиента
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...