然后,如果/ 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())"
}
}
}
测试用例:
操作: / comments 由一个客户端编写,同时 / user / barney / active 由另一客户端删除
场景:规则评估同时进行。因此,两个操作看到的 root RuleDataSnapshot仍然具有初始值。因此,用于删除和写入的写入规则评估为true。因此无法获得预期的行为。
如何应对这种情况?
[注意:使用交易不是一个安全的选择,因为经过身份验证的用户可以故意模拟这种情况并使应用程序崩溃]