由于并发写入,因此RuleDataSnapshot的完整性

时间:2019-10-03 17:04:21

标签: firebase firebase-realtime-database

Source

  

然后,如果/ users / barney / active包含值true,则使用uid为“ barney”的用户身份验证的用户可以写入/ comments节点

我的额外必要行为: / user / barney / active 仅在 / comments

下没有数据时才能删除

更新的规则:

{
"rules": {
    "comments": {
        ".read": "root.child('users').child(auth.uid).child('active').val() == true"
                }
    "users/barney": {
        ".write": "!(root.child('comments').exists())"
                    }
          }
}

测试用例: / user / barney / active 包含true, / comments 为空白(无数据)

操作: / comments 由一个客户端编写,同时 / user / barney / active 由另一客户端删除

场景:规则评估同时进行。因此,两个操作看到的 root RuleDataSnapshot仍然具有初始值。因此,用于删除和写入的写入规则评估为true。因此无法获得预期的行为。

如何应对这种情况?

[注意:使用交易不是一个安全的选择,因为经过身份验证的用户可以故意模拟这种情况并使应用程序崩溃]

0 个答案:

没有答案