分页行访问权限

时间:2016-08-31 01:07:04

标签: pagination couchdb nosql

您好我正在使用CouchDB并假设我有一个articles文档,其字段为users,其中包含允许查看此文章的用户ID数组。

示例场景,将有一个分页表视图,每页显示10篇文章,我的控制器将从CouchDB检索前10篇文章,然后在返回的文章上逐一执行访问权限检查。但是当前用户可能只有8个视图访问权限,因此该表只显示8篇而不是10篇。

除了在CouchDB层上实现访问权限逻辑之外,处理此类情况的最佳做法是什么?

1 个答案:

答案 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等。