1

我正在使用 CouchDB 存储来自各种来源的数据,并使用 couchdb-lucene 来允许临时查询。这对我很重要,因为我在提要中显示数据并且我希望此提要可过滤。CL 似乎非常适合。

但是,我还想为提要应用程序引入权限 - 用户应该只有在他/她有权查看提要项目时才能看到它。

现在,我希望能够运行临时查询,并且只返回当前经过身份验证的用户有权读取的提要项目

我能想到的唯一解决方案(到目前为止)是在每个提要项目中添加一个“权限”字段,我在其中存储其他用户的所有权限(显然跳过了根本没有权限的用户)

permissions: [{user_id: '123', read: true, write: true}, ...]

然后在 CL 中索引这个数组。

虽然这可能会奏效,但我觉得被迫将权限元数据嵌套在提要项目中有点糟糕......它甚至可能比将其分开更好的解决方案,但我只是不喜欢我似乎不喜欢在这里有一个选择。

唯一的其他解决方案(嗯,除了转储 CouchDB 之外)是运行临时查询而不关心权限,然后在选择所有“我的项目”的服务器上运行第二个查询并进行设置交集。但是这些集合可能很大(如果我将它分块,它可能需要很多 DB 请求 => 慢)。

我的解决方案很好还是有更好的解决方案?还是 CouchDB 不适合此类查询?

干杯!

4

1 回答 1

0

将权限数据保留在文档本身上,您走在正确的道路上。这将是您稍后构建视图的最简单方法,这将使您能够检查用户权限。所以不要担心,让它朝那个方向流动。当您使用 SQL 和 RDBMS 时,对嵌套数据的感觉很糟糕可能来自以前的时代,您希望在其中规范化每个表的地狱。这一次完全不同:)

顺便说一句,在 CouchDB 中执行“JOINS”的唯一可能性是使用Linked Documents。如果您有兴趣,可以尝试一下。但是,它不允许您在创建视图时查看链接文档的内部。

于 2014-05-13T05:41:15.653 回答