【发布时间】: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 公开数据)。
想法?
【问题讨论】: