Couchdb应用过滤器服务器端

时间:2017-07-26 10:10:31

标签: couchdb replication pouchdb

我正在使用PouchDB(客户端)和CouchDB(服务器端)开发移动应用。

我需要保护文档才能允许用户只读/写自己的文档。

我为此做了一个过滤器,例如:

function(doc, req) {
    return doc.owner == req.userCtx.name || doc.sharedWith == req.userCtx.name;
}

并且效果很好,但前提是来自客户端的请求包含过滤器:

/somedatabase/_alldocs?filter=filter/secure

出于明显的安全原因,我需要CouchDB在每个请求中使用过滤器,无论是否有客户端说明。这甚至可能吗?否则哪个是处理这些安全问题的正确方法?

有一个类似的问题here,但答案不适用于我的情况,因为我需要在用户之间共享文档并在所有数据库之间复制它们不是一个有效的选项。

2 个答案:

答案 0 :(得分:2)

所以我不知道你是否看过这个wiki,但它列出了几个可用的选项。其中一些已经过时了。

每个用户数据库

可能是最受欢迎的解决方案。正如您所说,您需要与其他用户共享文档。这可以通过以下方式完成:

  1. 共享时将文档复制到其他用户。你可以有一个监听_changes feed并在其他用户数据库中更新作者文件的守护程序。
  2. 构建Web服务以访问共享文档(非常类似于代理解决方案)
  3. 智能代理

    在数据库前构建智能代理并执行一些业务逻辑来获取文档。这使您可以更好地控制数据流,但肯定会更慢。

    注意

    validate_doc_read服务器功能可能会引起您的兴趣,但它从未成为CouchDB发布的一部分(由于列出的限制)。

答案 1 :(得分:0)

嗯,可能不是。我们正在开发的应用程序需要与不同用户共享文档。任何文档都可以与不同的用户组共享