具有每行访问权限的分页

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 页等。

【讨论】:

以上是关于具有每行访问权限的分页的主要内容,如果未能解决你的问题,请参考以下文章

类具有默认访问权限时的 Java 成员访问权限

我如何配置一个用户具有只读访问权限,而另一用户具有对Hangfire仪表板的完全访问权限?

我有一个冲突矩阵,以及具有不同访问权限的用户列表,我想检查该用户是不是为冲突访问权限

如何验证用户是不是具有网络访问权限并在没有网络访问权限时显示弹出警报

Teradata 锁定表以供读取,同时通过具有访问权限的视图访问表

没有为团队“xyz”找到具有 iTunes Connect 访问权限的帐户。App Store 分发需要itunes Connect 访问权限