这是我的第一个问题,希望我能为我的问题带来好运!
我一直在研究“免费/付费”应用程序,我的主要原则是让这两个客户允许“免费”客户仅从我的Firebase Realtime数据库中查询500个项目。但是,如果他们想要更多,则必须付费以查看所有项目。但是问题是我只能使这种情况发生在前端或客户端,这使我的Web应用程序容易受到攻击。.
能否请您帮我,如何根据客户状态在Firebase控制台上限制查询结果?
如果用户“已通过身份验证并为此付费”,则允许他列出500多个结果。如果他“匿名或通过身份验证但未为此付费”,则将其限制为500个结果。
在BACKEND上!
谢谢大家
答案 0 :(得分:4)
过去很长一段时间都不可能。但是我想您现在可以借助基于查询的规则来执行此操作。这使您的安全规则可以验证所附加的查询与您的规则匹配。例如(来自文档):
messages: { ".read": "query.orderByKey && query.limitToFirst <= 1000" }
因此,这些规则仅允许查询最多读取1000条消息。
示例查询:
db.ref("messages").on("value", cb) // Would fail with PermissionDenied db.ref("messages").limitToFirst(1000) .on("value", cb) // Would succeed (default order by key)
如果您将人们的最大物品数量存储在custom claim中,则应该能够在规则中进行检查:
messages: {
".read": "query.orderByKey &&
query.limitToFirst <= auth.token.maximumItemCount"
}
您会注意到,在每种情况下,客户端都应在其查询中指定正确的项目数。安全规则“仅”确保允许查询,但不会自动过滤项目。
我的免责声明“应该”是因为我从未测试过类似的东西,因此如果您在使它工作时遇到问题,请务必回发。
有关更多信息,请参见: