12

我想实现一个 webapp - 一个集成来自各种来源的数据并将它们显示给用户的提要。用户应该只能看到他有权读取的提要项目(例如,因为它们属于他所属的项目)。然而,一个提要项目可能(并且将会)被许多用户看到。

我真的很想使用 CouchDB(主要是因为很酷的 _changes 提要和 map/reduce 视图)。我正在考虑将应用程序实现为纯 couchapp,但我在权限模型方面遇到了问题。AFAIK,CouchDB 中没有每个文档的权限,这通常使用每个用户的数据库和复制来实现。

但是,当不同用户看到的内容之间有很多重叠时,这会带来很多开销……东西会被复制到所有地方,并在许多数据库中复制。我喜欢这种方法的优雅,但巨大的开销感觉就像是一个交易破坏者......(假设我有 50 个用户,他们都看到相同的数据......)。

请问有什么办法吗?替代解决方案?

4

2 回答 2

8

您可以按照基于每个数据库的 CouchDB 授权中所述强制执行读取权限。

对于写入权限,您可以使用CouchDB The Definitive Guide - Security中描述的验证函数。

您可以为每个项目创建一个数据库并在那里强制执行权限,然后所有数据在用户之间有效共享。如果用户自己共享提要并且还需要权限,您可以将用户设置为“项目”,因此相同的逻辑适用于任何地方。

使用这种设计,您可以为每个项目授权一个用户或一组用户(角色)。

于 2012-07-27T11:15:03.200 回答
4

除了(正如victorsavu3已经建议的那样)在您的应用程序和沙发之间的代理中处理您的读取身份验证之外,我只能想到其他两种选择。

首先是不在乎,磁盘很便宜,拥有多个数据副本可能看起来像很多不必要的重复,但它极大地简化了您的架构,并且您可以获得一些自动好处,例如轻松扩展以处理负载(只需移动一些将用户的数据库转移到其他服务器)。

其次是将共享数据拆分到不同的数据库中。这有时会限制您可以在视图中执行的操作(例如,没有"Linked Documents"),但在许多情况下这并不是什么大问题。

于 2012-07-30T23:17:55.713 回答