【发布时间】:2019-01-20 16:11:26
【问题描述】:
我们正在为健身房和健身中心开发 SaaS 解决方案。
有 3 个包。第一个对他们在系统中添加的前 50 个成员免费。然后需要升级以添加更多成员。
有一个安全规则来防止在达到该限制后添加更多成员。问题是,如果订阅升级然后降级。
假设他们升级了,总共增加了 100 名会员,然后降级到仅包含 50 名会员的免费计划。
在这种情况下,我们希望他们只获得他们添加到成员集合中的最后 50 个成员。换句话说,我们希望限制对超过 50 个成员文档的请求的访问。
match /_users/{memberId} {
allow read: if isMemberAuthenticated(memberId) || isGymAuthenticated();
allow update: if isGymAuthenticated() || isMemberAuthenticated(memberId);
allow create: if isGymPaid() && isGymAuthenticated();
}
我们考虑的解决方案是:
- 在成员文档中有一个 ID 号,并限制对 ID
- 拥有 Firebase Cloud 功能以请求成员文档并移除用户写入权限。这看起来像是 Firestore 的反模式。因为我们必须为用户对成员文档所做的任何更改实施云功能。
【问题讨论】:
标签: javascript firebase google-cloud-firestore firebase-security