我们为体育馆和健身提供了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
})`
到目前为止我们正在考虑的事情。