CouchDB - 在_users中获取自定义字段以进行复制过滤

时间:2016-01-28 17:01:19

标签: couchdb

我正在为Android开发一个简单的客户端,它从CouchDB数据库中获取数据。所有用户只能有一个数据库。 pull-replicated数据由JS函数过滤。这样的功能(简化)将是这样的:

function(doc,req) {
    if (!doc.type || doc.type !='item') { return false; }
    if (doc.foo && ... && req.userCtx.bar.indexOf(doc.foo) != -1) { return true; }
    ...
}

正如我在official documentation中所读到的,_users是设置与用户相关的自定义字段的理想场所。我在上面的代码中也看到了(参见req.userCtx.bar数组)。

我面临的问题是对象/ JSON req.userCtx only contains 这些字段:dbnameroles

1。什么是我的想法的好选择?此时我现在有点卡住了。 2. 如何检索用户的数据(所有字段为官方和自定义)? 3. 将过滤参数添加为大数组是否正确?

注意

我正在考虑在每个item中添加一个数组字段的混乱替代方案,其中包含允许所有用户提取此类item的列表,尽管我觉得必须有另一个方式。

1 个答案:

答案 0 :(得分:0)

_users中保存用户数据很有意思,因为只有用户或管理员才能阅读用户的文档。

但是,正如您所知,这并不意味着userCtx对象可以使用所有用户数据。你得到的只是用户的nameroles数组。你可以使用roles吗?

要检索所有用户的数据,您应该从_users数据库中获取用户的文档。您可以通过GET上的http://localhost:5984/_users/org.couchdb.user:[USER]请求执行此操作。

要知道什么是适合您的问题的解决方案,我们需要更多信息。例如,查看您的代码,您似乎设计了该过滤器,目的是将复制限制为列出为用户可见的文档。但是,您无法以复制的方式真正锁定CouchDB,并且用户无权读取整个数据库。你真的需要每个用户一个数据库来实现这个目的。