您好我正在使用CouchDB并假设我有一个articles
文档,其字段为users
,其中包含允许查看此文章的用户ID数组。
示例场景,将有一个分页表视图,每页显示10篇文章,我的控制器将从CouchDB检索前10篇文章,然后在返回的文章上逐一执行访问权限检查。但是当前用户可能只有8个视图访问权限,因此该表只显示8篇而不是10篇。
除了在CouchDB层上实现访问权限逻辑之外,处理此类情况的最佳做法是什么?
答案 0 :(得分:0)
要完成此操作,我只需使用users
字段上的关键字视图:
function (doc) {
doc.users.forEach(function (user) {
emit([ user ]);
});
}
在这种情况下我只发出一个只有1个项目的数组。我假设您还会发布类似doc.created
的内容,以便对您的文章进行排序,您只需在user
之后在该数组中添加它们。
视图结果如下所示:
{
"rows": [
{ "id": "<article-1>", "key": [ "<user-1>", "<created>" ] },
{ "id": "<article-2>", "key": [ "<user-1>", "<created>" ] },
{ "id": "<article-3>", "key": [ "<user-1>", "<created>" ] },
{ "id": "<article-1>", "key": [ "<user-2>", "<created>" ] },
{ "id": "<article-1>", "key": [ "<user-3>", "<created>" ] }
]
}
您可以像通常使用CouchDB一样分页。除了第1页的常规分页start_key=["<user-1>"]&end_key=["<user-1>","\ufff0"]
,第2页的limit=10&skip=0
等,您只需使用limit=10&skip=10
等。