【问题标题】:Pagination with per-row access rights具有每行访问权限的分页
【发布时间】:2017-01-07 10:22:58
【问题描述】:

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

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

除了在 CouchDB 层实现访问权限逻辑之外,处理这种情况的最佳实践是什么?

【问题讨论】:

    标签: pagination couchdb nosql


    【解决方案1】:

    为此,我只需使用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 一样简单地进行分页。您只需使用start_key=["&lt;user-1&gt;"]&amp;end_key=["&lt;user-1&gt;","\ufff0"] 以及通常的分页limit=10&amp;skip=0 用于第1 页,limit=10&amp;skip=10 用于第2 页等。

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 1970-01-01
      • 2013-01-25
      • 2017-10-08
      • 2023-01-19
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2013-07-17
      相关资源
      最近更新 更多