Couchdb 应用过滤器服务器端
Couchdb apply filter server side
我正在使用 PouchDB
(客户端)和 CouchDB
(服务器端)开发移动应用程序。
我需要保护文档,以便允许用户 read/write 仅他自己的文档。
我为此做了一个过滤器,比如:
function(doc, req) {
return doc.owner == req.userCtx.name || doc.sharedWith == req.userCtx.name;
}
它运行良好,但前提是来自客户端的请求包含过滤器:
/somedatabase/_alldocs?filter=filter/secure
出于明显的安全原因,我需要 CouchDB 在每个请求中使用过滤器,无论是否有客户端显式。这可能吗?否则,处理这些安全问题的正确方法是什么?
有一个类似的问题here但答案不适用于我的情况,因为我需要在用户之间共享文档并在所有数据库之间复制它们不是一个有效的选项。
所以我不知道您是否看过这个 wiki 但它列出了几个可用的选项。其中一些已经过时了。
每个用户数据库
可能是最受欢迎的解决方案。如您所说,您需要与其他用户共享文档。这可以通过 :
- 共享时将文档复制给其他用户。您可以有一个监听 _changes 提要并更新其他用户数据库中的作者文件的守护进程。
- 构建 Web 服务以访问共享文档(与代理解决方案非常相似)
智能代理
在您的数据库前构建一个智能代理,并执行一些业务逻辑来获取文档。这使您可以更好地控制数据流,但速度肯定会变慢。
备注
validate_doc_read 服务器函数可能会让您感兴趣,但它从未成为 CouchDB 版本的一部分(由于列出的限制)。
嗯,可能不是。我们正在开发的应用程序需要与不同的用户共享文档。任何文档都可以与不同的用户组共享
我正在使用 PouchDB
(客户端)和 CouchDB
(服务器端)开发移动应用程序。
我需要保护文档,以便允许用户 read/write 仅他自己的文档。
我为此做了一个过滤器,比如:
function(doc, req) {
return doc.owner == req.userCtx.name || doc.sharedWith == req.userCtx.name;
}
它运行良好,但前提是来自客户端的请求包含过滤器:
/somedatabase/_alldocs?filter=filter/secure
出于明显的安全原因,我需要 CouchDB 在每个请求中使用过滤器,无论是否有客户端显式。这可能吗?否则,处理这些安全问题的正确方法是什么?
有一个类似的问题here但答案不适用于我的情况,因为我需要在用户之间共享文档并在所有数据库之间复制它们不是一个有效的选项。
所以我不知道您是否看过这个 wiki 但它列出了几个可用的选项。其中一些已经过时了。
每个用户数据库
可能是最受欢迎的解决方案。如您所说,您需要与其他用户共享文档。这可以通过 :
- 共享时将文档复制给其他用户。您可以有一个监听 _changes 提要并更新其他用户数据库中的作者文件的守护进程。
- 构建 Web 服务以访问共享文档(与代理解决方案非常相似)
智能代理
在您的数据库前构建一个智能代理,并执行一些业务逻辑来获取文档。这使您可以更好地控制数据流,但速度肯定会变慢。
备注
validate_doc_read 服务器函数可能会让您感兴趣,但它从未成为 CouchDB 版本的一部分(由于列出的限制)。
嗯,可能不是。我们正在开发的应用程序需要与不同的用户共享文档。任何文档都可以与不同的用户组共享