模拟器允许读/写 Posts 键,但结果对于 Users 键规则是正确的。 Posts 下的每个帖子都有一个 uid 值,代表 Users 键中的用户。
是我的规则错误还是模拟器错误?温柔点,我是 Firebase 新手。 :)
两个等于:
编辑数据视图:
尝试更改规则以检查
uid
子项是否存在。例如:
".read": "data.child('uid').exists() && data.child('uid').val() === auth.uid"
基于快速测试,我认为发生的情况是,当
uid
子项不存在时,data.child('uid').val()
的评估失败,并通过为其分配 false 值来处理。 同样,由于用户未经过身份验证,因此 auth
为 null,并且 auth.uid
也计算为 false。 所以你的规则实际上变成了".read": "false === false"
,这是真的。
当我第一次使用您的规则模拟读取并且我的数据库中的
uid
下没有 /posts/1
子项时,读取被授予,正如您所报告的。 当我添加一个uid
孩子时,它没有被授予。