【问题标题】:Make a public profile and a private profile in angular 4+在 Angular 中创建公开个人资料和私人个人资料 4+
【发布时间】:2018-03-26 03:13:37
【问题描述】:

我需要帮助来思考这个问题,这是我的 firebase 架构。

我需要查看个人资料,但要公开,最好的方法是什么?

那么,您如何看待架构以及一位用户如何进行对话?

我认为对话节点可以留在用户节点之外,并且每个用户的每个引用对话。选择哪一个?

【问题讨论】:

    标签: angular firebase firebase-realtime-database angular-cli


    【解决方案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
        ...
    

    【讨论】:

      猜你喜欢
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多