关于安全性和实用性,我对我的 Firebase 设置有疑问。
目标是使用户能够购买积分,并一一消费这些积分。为了实现这一点,我设置了一个“ users ”对象来存储用户数据(姓名、地址等),一个“ transactions ”对象来存储所有购买(金额、时间等),以及一个“ spendcredits ”我存储连接到用户花费信用的数据的对象(时间,在什么等)。
由于应用程序必须知道用户仍然可以花费多少积分,我在用户对象中创建了一个名为 validCredits 的变量,当前可用的积分应该存储在其中。用户对“ users ”中他自己的用户对象具有读+写权限,对“ spendcredits ”中他自己的对象具有读+写权限。只有不同的服务器对“事务”对象具有读+写权限。
所以发生的情况是,用户购买了 5 个积分。服务器用 +5 更新他的 validCredits 变量。用户花费一个积分 (-1),花费另一个积分 (-1) 并再购买 5 个积分 (+5)。他的新 validCredits 金额为 8。
我不确定这是否是安全/最佳设置。恐怕由于用户对自己的帐户具有写入权限,其中存储了“ validCredits ”变量,因此他可能以某种方式通过增加此值来添加额外的信用?或者可以通过只允许用户在该字段上使用“-1 credit”运算符来防止这种情况发生吗?
我还可以想象,您可能希望将所有内容存储在“事务”对象中,并在 App 请求最新数量的有效 Credits 时对所有事务进行总和?对于这种带有付款和信用的系统,一般推荐什么?