我正在为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 这些字段:db
,name
和roles
。
1。什么是我的想法的好选择?此时我现在有点卡住了。 2. 如何检索用户的数据(所有字段为官方和自定义)? 3. 将过滤参数添加为大数组是否正确?
注意
我正在考虑在每个item
中添加一个数组字段的混乱替代方案,其中包含允许所有用户提取此类item
的列表,尽管我觉得必须有另一个方式。
答案 0 :(得分:0)
在_users
中保存用户数据很有意思,因为只有用户或管理员才能阅读用户的文档。
但是,正如您所知,这并不意味着userCtx
对象可以使用所有用户数据。你得到的只是用户的name
和roles
数组。你可以使用roles
吗?
要检索所有用户的数据,您应该从_users
数据库中获取用户的文档。您可以通过GET
上的http://localhost:5984/_users/org.couchdb.user:[USER]
请求执行此操作。
要知道什么是适合您的问题的解决方案,我们需要更多信息。例如,查看您的代码,您似乎设计了该过滤器,目的是将复制限制为列出为用户可见的文档。但是,您无法以复制的方式真正锁定CouchDB,并且用户无权读取整个数据库。你真的需要每个用户一个数据库来实现这个目的。