2017-10-13 66 views

回答

1

您将多种数据类型嵌套在单个根下,这是大多数Firebase实时数据库开发人员推荐的。其中一些最重要的原因是:

  1. Firebase将始终读取整个节点,因此如果没有阅读所有对话,则无法读取用户的属性。有很多情况下这是浪费的,比如你只想显示用户名列表。
  2. 一旦授予用户对节点的读取访问权限,他们就可以访问该节点下的所有数据。您无法在较低的级别上获得此许可。这意味着在你的情况下,任何人都可以阅读用户的个人资料信息,也可以阅读他们的所有对话。这可能不是你想要的。
  3. 您可以尝试解决这最后一个问题,通过给予用户对用户的特定属性的读取权限,例如/Users/$uid/name等,这样他们可以读取名称,但不能读取对话。在个人用户节点上,这确实会起作用。但是由于您没有/Users的读取权限,因此您无法再获取用户配置文件列表。

来模拟你分享内容的常用方法是分裂的谈话和用户配置文件到单独的顶级节点,每个键上的用户的UID:

Users 
    $uid 
    name: "Matias Celiz" 
    gender: "..." 
Conversations 
    $uid 
    ... 

如果你想独立的公众形象信息和私人资料信息,添加另一个顶级节点来分割两者:

Users 
    $uid 
    name: "Matias Celiz" 
    gender: "..." 
Profiles 
    $uid 
    name: "Matias Celiz" 
Conversations 
    $uid 
    ...