gpt4 book ai didi

Firebase:如何构建公共(public)/私有(private)用户数据

转载 作者:行者123 更新时间:2023-12-04 05:17:00 25 4
gpt4 key购买 nike

自然,我数据库中的用户拥有可以公开访问的信息以及只有他们应该看到的其他信息。我正在考虑两种不同的方法来实现这一点。

选项 1:/users/$uid只有该用户可读并且拥有 /users/$uid/profile任何人都可以阅读。

选项 2:保留/users/$uid只能由该用户读取并具有 /profiles/$uid那是公开的。这遵循了更扁平数据结构的建议,但我看不出在这种情况下它有什么更好的地方。

最佳答案

了解为什么“更扁平”结构更好的最简单方法是查看如何保护它以及如何实现功能。
你的第一个结构是:

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
}
}
}
}
}
拥有公共(public)信息的主要原因之一是能够显示该信息的列表。在 JavaScript 中:
ref.child('users').child(???).child('profile').on('child_added'...
这行不通,因为我们在 ??? 中输入了什么? . Firebase 操作需要能够从一个位置读取整个列表,并且用户需要对该整个位置(而不仅仅是单个子节点)具有读取权限。
如果我们构建数据以将公共(public)信息与私有(private)信息分开,我们会得到:
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"
}
}
}
}
现在要获取公共(public)用户配置文件的列表,您可以:
ref.child('profiles').on('child_added'...
这将起作用,因为每个人都对 profiles 具有读取权限.

关于Firebase:如何构建公共(public)/私有(private)用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38648669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com