我有“UID”数据库(每个用户的uid root)。 我尝试在用户之间共享“uid”根,并且我希望在以下三种情况之一中为“UID”root提供读取权限: 1.访问的用户是所有者。 2.访问的用户位于目标根目录的“UID \ PERMITTED_USERS”中。 3.访问的用户位于目标根目录的“UID \ TEMP_USERS”中。
为了实现这一目标,我创建了下一条规则:
".read" : "$uid === auth.uid || (root.child(root.child(auth.uid).child('PRE_SHARE').val()).child('TEMP_USERS').hasChild(root.child(auth.uid).child('TEMP_PERMIT').val()) || root.child(root.child(auth.uid).child('CURRENT_SHARE').val()).child('PERMITTED_USERS').hasChild(auth.uid))"
但我很失望地发现只检查了前两个条件,而第三个条件没有。 (我改变了条件的顺序,每次我都可以使用前两个连接进行访问)。
有没有办法解决这个问题?
编辑:
答案 0 :(得分:0)
经过大量测试后我发现了问题。我的代码删除了PRE_SHARE以及TEMP_USERS,当规则尝试访问不存在的PRE_SHARE的val()时,它会获得空指针异常。太糟糕了,Firebase不会写这个例外,这会节省很多时间......
".read" : "$uid === auth.uid ||
(root.child(auth.uid).hasChild('PRE_SHARE') &&
root.child(root.child(auth.uid).child('PRE_SHARE').val()).hasChild('TEMP_USERS') &&
root.child(auth.uid).hasChild('TEMP_PERMIT') &&
root.child(root.child(auth.uid).child('PRE_SHARE').val()).child('TEMP_USERS').hasChild(root.child(auth.uid).child('TEMP_PERMIT').val())) ||
(root.child(auth.uid).hasChild('CURRENT_SHARE') &&
root.child(root.child(auth.uid).child('CURRENT_SHARE').val()).hasChild('PERMITTED_USERS') &&
root.child(root.child(auth.uid).child('CURRENT_SHARE').val()).child('PERMITTED_USERS').hasChild(auth.uid))"