在安全和实用性方面,我有一个关于我的Firebase设置的问题。
目标是使用户能够购买信用,并一个一个地使用这些信用。为了实现这一点,我设置了一个“用户”对象,存储用户数据(姓名、地址等),一个“事务”对象,存储所有的采购(金额,时间等),和一个“花销”对象,其中我存储了与用户消费的数据(时间,时间,等等)。
由于应用程序必须知道用户仍然可以花费多少学分,所以我在名为validCredits的用户对象中创建了一个变量,其中应该存储当前可用的学分。用户在“用户”中对自己的用户对象拥有read+write权限,在"spendcredits“中对自己的对象拥有read+write权限。只有不同的服务器对“事务”对象具有read+write权限。
所以发生的是,用户购买5个学分。服务器用+5更新他的validCredits变量,用户花费一个信用(-1),花费另一个(-1),再购买5个学分(+5)。他的新validCredits金额是8。
我不确定这是否是一个安全/最佳的设置。我担心,由于用户对自己的帐户(存储"validCredits“变量)有写权限,他可能会通过增加这个值来增加额外的学分吗?或者仅仅允许用户在这个领域使用"-1信用“操作可以防止这种情况发生吗?
我还可以想象,您可能希望将所有内容存储在“事务”对象中,并且在应用程序请求最新的有效信用数时,只需执行所有transactins的总和即可?对于这样一个有支付和信贷的系统,一般建议怎样做?
发布于 2015-10-17 18:00:43
以下规则可用于强制用户一次只能减少一个validCredits。我假设您有某种方法来区分服务器和用户,这就是auth.isServer所代表的。
{
"users": {
"$uid": {
validCredits": "auth.isServer || newData.val() === data.val() - 1"
}
}
}https://stackoverflow.com/questions/33170689
复制相似问题