【问题标题】:Drafts & Publishing in Firebase在 Firebase 中草稿和发布
【发布时间】:2014-07-22 11:05:57
【问题描述】:

构建 CMS 并尝试找出使用 Firebase 处理草稿的最佳方式。例如,站点管理员将编辑文档,这些文档会公开发布到站点。

起初,完美的解决方案似乎是将“公共”属性设置为 true,并通过安全规则强制执行,如下所示:

{
  "rules": {
    "documents": {
      "$id": {
        ".read": "data.child('public').val() == true"
      }
    }
  }
}

(如本文所述:https://www.firebase.com/docs/security/rule-expressions/data.html

但显然该文档存在缺陷,因为在该示例中,我可以点击 /documents,它会为我提供所有文档,而不管 'public' == true。为防止这种情况,您必须将其更改为:

{
  "rules": {
    "documents": {
      ".read": false,
      "$id": {
        ".read": "data.child('public').val() == true"
      }
    }
  }
}

理想情况下,我能够为 /documents/ 公开一个简单的 REST API 端点,它只返回所有公共文档及其所有子属性。

显然 Firebase 不支持过滤(这基本上是我试图通过说“SELECT * FROM documents WHERE public = true”来做的事情。

所以我看到了两个选项:

选项 1:通过将文档草稿存储在不同的位置(如 /drafts/documents)来保持 REST API 端点整洁。管理员将使用自动保存创建和编辑草稿文档,然后有一个“发布”按钮,单击该按钮会将当前草稿复制到公共 /documents。

选项 2:没有 /documents 的干净 REST API 端点,而是有 /documentIndex,它只返回文档 ID 列表。然后客户端必须遍历每个 documentIndex 以调用 /documents/:id 处的每个单独的文档端点。我担心这个选项的性能。此选项似乎记录在此处:Firebase data normalized. How should I fetch a collection based on this structure?,但未涵盖对 REST API 的影响。我正在使用 AngularJS,但其他客户端可能希望以其他方式使用文档数据(因此我也想通过 REST API 公开数据)。

想法?

【问题讨论】:

    标签: angularjs firebase


    【解决方案1】:

    这两种方法都很好。当结构和排序经常更改或存在多种排序可能性时(例如,有时按日期排序,有时按排名排序的列表),索引会更加灵活。额外的侦听器对性能并没有太大影响(通常不会超过获取字节所需的时间)。

    在路径之间移动数据(一种队列或文件夹方法)可能很适合您的需求,因为您已经强调了 REST 访问。如果与您的特定用例不同,想要批量移动大量数据(数百兆),那么这不是一个好方法,因为它需要先将数据下载到客户端,然后再将其写回新路径。

    如果您的目标是针对可能的其他客户端进行优化,那么您需要首先确定这些客户端是什么以及它们将如何连接。仅仅根据可能性做出任何明智的决定是很困难的。

    在纯粹为 REST 进行任何优化之前,我会先尝试进行一些分析以了解它的性能。您可能会发现这对于您心目中的用例来说已经足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 2018-07-13
      • 2012-06-21
      相关资源
      最近更新 更多