【发布时间】:2021-02-20 05:18:16
【问题描述】:
这些是我关于数据库中用户节点的安全规则。
"users": {
"$uid": {
".read": "auth != null && $uid === auth.uid",
"$user_nodes": {
".write": "(auth != null && $uid === auth.uid) || (auth == null && $user_nodes.contains('connection'))"
}
}
}
当我通过身份验证并尝试阅读我的 auth.uid 下的全部信息时,使用这些规则一切正常。出于某种原因,虽然整个节点不允许 set 操作,但 update 操作是允许的。有人可以向我解释为什么会这样吗?
编辑:所以在代码中读取操作看起来像这样:
userRef.child(auth.getCurrentUser().getUid()).addListenerForSingleValueEvent(new ValueEventListener() {...});
集合操作看起来像这样:
userRef.child(auth.getCurrentUser().getUid()).setValue(...);
我无法向您显示确切的代码,因为我在 rules playground 中测试规则时实际遇到了我上面解释的行为。
【问题讨论】:
-
请编辑问题以显示在这些规则下无法按您预期的方式运行的应用代码示例。我们应该能够复制您显示的内容并自己运行以观察相同的行为。
-
@DougStevenson 我刚刚编辑了这个问题。但正如我所说的那样,我无法真正显示确切的代码,因为这种行为是在规则操场上经历过的。这对我的应用程序来说并不是什么大问题,但我只是想知道为什么在规则操场中,允许对整个节点 $uid 进行更新操作,但设置操作不符合这些确切的规则。
标签: android firebase firebase-realtime-database firebase-security