在“用户”节点上使用具有真实规则的.read
时,我可以访问一些经过身份验证的用户,读取该树上列出的每个用户。我当时只需要一些。
我需要一些像过滤器一样的规则。因此,在获取用户/路径时,此经过身份验证的用户将获得仅的用户数组,这些用户数组具有此$uid > permission > auth.uid = true
之类的权限路径。
{
"rules": {
"Users" : {
".read": true,
"$uid" : {
".read" : "(auth != null && auth.uid === $uid) || root.child('Users/'+ $uid+'/permission/'+ auth.uid).val() == true",
".write" : false
}
},
}
}
答案 0 :(得分:2)
您不能将规则用作过滤器,它们对您尝试读/写的特定分支是原子的。
您的外部读取规则允许访问整个ref.child("Users").child(targetUserId).once...
分支。删除它并拥有您想要阅读的userId将获得您期望的行为。所以,不幸的是,只有在使用{
"rules": {
"Users" : {
"$uid" : {
".read" : "(auth != null && auth.uid === $uid) || root.child('Users/'+ $uid+'/permission/'+ auth.uid).val() == true",
".write" : false
}
}
}
}
进行阅读时才会有效。
/User/userId
如果您希望在一次调用中获得经过身份验证的用户有权访问的用户ID列表,我建议您实际将可访问用户保存在 {
"rules": {
"Users" : {
"$uid" : {
".read" : "(auth != null && auth.uid === $uid) || root.child('Users/'+ auth.uid +'/accessibleUsers/'+ $uid).val() == true",
".write" : false
}
}
}
}
内,而不是拥有可以读取的用户ID。你的规则会略有变化。
{{1}}
此外,缩放时可能会变得复杂,这取决于您为应用程序规划的内容,您应该考虑将此可访问用户列表放在单独的分支中(在用户之外)。