您好我有以下用例,假设我有一个包含以下字段的Cloudant文档:
{
public: false, // Visibility of the doc
permissions: [1,2,3] // List of user IDs that are allowed view access to the doc
}
只有特权用户(如权限字段中所述)才具有访问权限,或者如果其公共(public:true),则每个用户都可以访问它。
当我尝试编写搜索索引以检索当前用户有权访问的所有文档时,我的问题就出现了。我的搜索索引将如下所示:
function (doc) {
if (!doc.public) {
doc.permissions.forEach(function(entry) {
index("user_id", parseInt(entry));
});
} else {
index("user_id", ???); // If its public document, how should I index it?
}
}
它在public设置为false的doc上运行良好,但我的搜索索引无法返回public设置为true的文档。我的搜索查询看起来像这样:
q=user_id:1
任何建议,因为我真的需要在Cloudant层而不是在我的控制器层上实现它。
答案 0 :(得分:1)
根据您的描述,我发现观点更适合这种情况。如果您绝对需要查询搜索,我可以尝试找出另一种解决方案。
首先,我会做一个像这样的映射函数的视图:
function(doc) {
if (doc.public) //If it's public, we will emit the magic ID *. Feel free to use any other key that will be unique.
emit('*');
else if (doc.permissions && Array.isArray(doc.permissions)) //We valid the permission property
for (var i in doc.permissions)
if (doc.permissions[i])
emit(doc.permissions[i]);
}
然后,当我查询获取用户允许的文档时,我只是查询这样的视图:_view/byUserId?keys=['myUserId','*']
对于每一行,您将拥有 id 属性中允许的文档的ID。