海绵宝宝撒
了解“更平坦”结构为何更好的最简单方法是查看如何保护它以及如何实现功能。你的第一个结构是:users: {
uidOfJacob: {
stackId: 884522,
ssn: "999-99-9999",
profile: {
displayName: "Jacob Philips"
}
},
uidOfPuf: {
stackId: 209103,
ssn: "999-99-9999",
profile: {
displayName: "Frank van Puffelen"
}
}}你可以用以下方法保护它:{
"rules": {
"users": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
"profile": {
".read": true
}
}
}
}}获取公共信息的主要原因之一是能够显示该信息的列表。在JavaScript中:ref.child('users').child(???).child('profile').on('child_added'...这不起作用,因为我们投入了什么???。Firebase操作需要能够从一个位置读取整个列表,并且用户需要具有该整个位置的读取权限(而不仅仅是对各个子节点)。如果我们构建数据以将公共信息与私人信息分开,我们得到:users: {
uidOfJacob: {
stackId: 884522,
ssn: "999-99-9999",
profile: {
displayName: "Jacob Philips"
}
},
uidOfPuf: {
stackId: 209103,
ssn: "999-99-9999",
profile: {
displayName: "Frank van Puffelen"
}
}},"profile": {
uidOfJacob: {
displayName: "Jacob Philips"
},
uidOfPuf: {
displayName: "Frank van Puffelen"
}}你可以用以下方法保护它:{
"rules": {
"users": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
},
"profiles": {
".read": true,
"$uid": {
".write": "auth.uid == $uid"
}
}
}}要获取公共用户配置文件的列表,您需要执行以下操作:ref.child('profiles').on('child_added'...这将有效,因为每个人都有阅读权限profiles。