Firebase数据库规则只有三个条件中的两个有效

时间:2017-09-14 05:44:01

标签: firebase firebase-realtime-database

我有“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))"

但我很失望地发现只检查了前两个条件,而第三个条件没有。 (我改变了条件的顺序,每次我都可以使用前两个连接进行访问)。

有没有办法解决这个问题?

编辑:

添加db示例: sharing user

enter image description here

1 个答案:

答案 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))"