我希望数据库中的用户能够更容易地阅读和管理。使用用户电子邮件地址作为属性名而不是用户ID:
用户:
"Users" : {
"emailaddress@domain.com":{
"id": "DK66qu2dfUHt4ASfy36sdfYHS9fh",
"name": "A Display Name",
"groups": {
"moderators": true,
"users": true
}
},
{...}
}这样,如果我在一个组中有一个用户列表,他们就可以被读成电子邮件列表,而不是用户ID列表。
组,如:
"Groups": {
"moderators":{
"name": "moderator",
"members": {
"emailaddress@domain.com": true,
"emailaddress2@domain.com": true
}
}
}组而不是:
"Groups": {
"moderators":{
"name": "moderator",
"members": {
"DK66qu2dfUHt4ASfy36sdfYHS9fh": true,
"K2fkHYQDFOge3Hw7SjRaGP3N2sdo": true
}
}
}然而,使用规则来验证用户(例如他们的组)的属性,需要我维护两个用户列表,一个像上面的列表,另一个基本上是ID和电子邮件地址的键值对的表,这样我就可以从他们的uid中获得用户的电子邮件地址。
伪码规则: Users[UsersKeyVal[auth.uid]].groups.moderator == true
有了火力基地,什么才是最可接受的做法?两者的利弊是什么?
发布于 2016-06-06 18:19:19
请不要在他们的电子邮件地址下存储用户数据!以后会有大麻烦的。
用户节点应遵循“标准”Firebase设计模式
users
uid_0
name:
gender:
etc
uid_1
name:
gender:
etc底线是,一般来说,最好将存储在节点中的动态数据与节点的键分离。
为什么?
假设您构建了一个具有各种链接和对frank@mycoolcompany.com的引用的复杂结构,然后由@mynotsocoolcompany.com获取@mycoolcompany.com。那么,您就必须重新构建整个数据库中对franks电子邮件的所有引用。呃。
那么,如果有100或1000个用户@mycoolcompany.com!唉哟。
如果您不关联数据,如我上面建议的结构,您只需更改节点内的电子邮件地址和其他一切.就行了!
请阅读由Firebaser编写的堆栈溢出的答案,并回答您的问题。
发布于 2016-06-06 07:59:00
在我看来,您的数据结构没有问题。
根据文档
这是双向关系的必要冗余。它允许您快速有效地获取您的成员资格。
此外,使用从firebase生成的UId或您的自定义Id (在这里,您的电子邮件)不会改变firebase的工作方式。你只需要确保你的电子邮件是独一无二的。
https://stackoverflow.com/questions/37651261
复制相似问题