【发布时间】:2015-10-16 12:36:50
【问题描述】:
我对我的 Firebase 设置有疑问,涉及安全性和实用性。
目标是让用户能够购买积分,并逐一使用这些积分。为了实现这一点,我设置了一个“users”对象来存储用户数据(姓名、地址等),一个“transactions”对象存储所有购买(金额、时间等),以及一个“spendcredits”对象,我在其中存储与用户消费信用(时间、内容等)相关的数据。
由于应用程序必须知道用户还可以花费多少积分,因此我在用户对象中创建了一个名为 validCredits 的变量,用于存储当前可用的积分。 用户对“users”中他自己的用户对象具有读+写权限,对“spendcredits”中他自己的对象具有读+写权限。只有不同的服务器对“transactions”对象具有读写权限。
所以发生的情况是,用户购买了 5 个积分。服务器用 +5 更新他的 validCredits 变量。用户花费一个积分 (-1),花费另一个积分 (-1) 并再购买 5 个积分 (+5)。他的新 validCredits 金额为 8。
我不确定这是否是安全/最佳设置。恐怕由于用户对自己的帐户具有写入权限,其中存储了“validCredits”变量,因此他可能以某种方式通过增加此值来添加额外的信用?或者可以通过只允许用户在该字段上使用“-1 credit”运算符来防止这种情况发生吗?
我还可以想象,您可能希望将所有内容存储在“transactions”对象中,并在 App 请求最新数量的有效 Credits 时对所有交易进行求和?对于这种带有付款和信用的系统,一般推荐什么?
【问题讨论】:
-
这是一个很好的问题。澄清一下如何:您是使用 Firebase 规则进行验证还是基于应用程序?您使用的是什么类型的登录身份验证?这是什么平台?
-
您可以使用安全规则强制用户只减少他们的
validCredits。也就是说,这个问题对 SO 来说太宽泛了。 -
@AnidMonsur 您能否发布一个示例安全规则的答案,该规则将强制用户仅减少其有效信用额度?这是一个很好的答案,可以为最初的问题提供一个可能的解决方案。
标签: security authorization firebase payment credits