如何在 CouchDB 数据库中将私人文档与 public 文档一起制作?

How do I make private docs alongside public docs in a CouchDB database?

我对 CouchDB 有点陌生,我想知道如何制作私人文档,也就是说我想要一个数据库,其中所有文档都是 public(rw,或 r 使用 a validate_doc_update) 除了 few/some 个选定的文档,我将如何做这样的事情?

为了让事情更复杂一点,我希望它们对管理员是私有的/可由管理员访问,但也有不同数量的选定用户(但没有其他人)。

我在想也许我可以在这些文档中有两个键,分别称为 "private" 和 "private_users",将它们设置为 true 和 [user1, user2, user3],以及 不知何故 使用该信息将文档设为私有/仅供他们访问。

因此,从本质上讲,它是关于用户能够创建文档并让所有人或仅对他们自己和其他选定用户可见的文档。

实现此目的的一种方法是通过将安全管理员和成员列表设置为所有者(使数据库完全私有)来使数据库私有化,然后通过后端脚本将所有调用路由到读取文档,该脚本检查通过管理员帐户获取文档的这些属性,并在满足条件的情况下获取和 returns 内容,但问题是我想通过配置 CouchDB 并从客户端浏览器直接对 CouchDB 进行 CORS HTTPS 调用来做到这一点, 中间没有脚本。

这可能吗?

So essentially it's about users being able to create docs and have them visible to everybody or just themselves and other selected users ...... Is this possible?

不仅仅是 couchdb...

您在数据库中使用 _security 设置的权限仅对其应用写入级安全性。 其他方面,大多数文档(设计文档除外)都可供每个人阅读。具有验证功能 你可以对谁写文件施加进一步的限制,但是同样没有办法检查谁在阅读你的文件。

rcouch has a validation on read 这可以帮助你做你想做的事。否则,如果您想使用 couchdb,您可以使用代理与其通信。

这个问题有几种可能的解决方案:

问题:对于给定用户,只允许特定访问数据库中的给定文档。

  • 每个用户的数据库:

为每个用户创建一个数据库,并在该给定用户的数据库上使用身份验证。因为视图不能跨数据库工作,所以您必须在不同的用户数据库之间复制所有需要的数据,以允许视图包含私有和 public/other 用户的数据。因为普通用户不能 create/delete 数据库,所以你需要有一个单独的进程 运行 来监视你的数据库的变化,并在新用户注册时创建一个新的用户数据库。

  • 智能代理:

创建一个智能代理,用用户凭据包装所有文档并过滤所有结果。

  • 基于每个用户的文档加密:

开发邮件列表中提到的 google 文档中描述了此解决方案。该解决方案的目标是创建一个类似 P2P 的系统,您可以在其中将数据复制到您不信任的节点。

  • validate_read_doc:

在每次读取时调用 javascript 函数,其方式与应用 validate_doc_update 系统的方式相同。

更多信息:

http://wiki.apache.org/couchdb/PerDocumentAuthorization