如何使用Firestore文档中的另一个值来限制Firestore查询限制?

时间:2019-01-25 11:10:03

标签: javascript node.js firebase google-cloud-firestore google-cloud-functions

我们为体育馆和健身提供了SaaS解决方案。

共有3个计划,每个体育馆都订阅了一个。第一个计划最多可容纳50个会员,并且是免费的,第二个计划可容纳50至500个会员,且价格为$ x,第三个计划为500+个会员,价格为$ y。计划及其允许的成员人数存储在Firestore的集合中。

我们有Firestore安全规则,该规则可以阻止超出计划允许的成员数量的请求。那是因为健身房可以升级到第二个计划,并增加150个成员,然后降级为免费。在这种情况下,只能再次请求50个成员。

即使安全规则像超级按钮一样工作,但我们仍不清楚如何在客户端中正确实现此规则。客户端是Vue.js网站。网站加载后,会从Firestore请求健身房的成员并将其存储到Vuex中。当请求的数量超出允​​许的数量时,完全会出现权限不足的消息。

问题在于客户端上的Firestore请求的限制。允许的成员数量与健身房订阅的计划相对应,该计划存储在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. 创建云功能以请求健身会员并禁止从客户端访问健身会员

0 个答案:

没有答案