2012-05-15 18 views
11

我想实现一个web应用程序,这个应用程序集成了各种数据源的数据并将它们显示给用户。用户应该只能看到他有权读取的供稿项目(例如,因为他们属于他所属的项目)。但是,某个Feed项目可能(且将会)被许多用户看到。对于拥有大量共享数据的用户,CouchDB每用户数据库方法是否可行?

我真的很喜欢使用CouchDB的(主要是因为凉爽_changes饲料和地图/减少的观点)。我正在考虑将该应用作为纯粹的couchapp实施,但我在使用权限模型时遇到了问题。 AFAIK,CouchDB中没有每个文档的权限,这通常使用每个用户的数据库和复制来实现。

但是,当有很多之间有什么不同的用户所看到的重叠,这将增加开销的很多东西......会复制所有的地方,并在许多数据库中复制。我喜欢这种方法的优雅,但大量的开销感觉像是一个破坏者......(比方说,我有50个用户,他们都看到相同的数据...)。

任何想法如何,请?替代方案?

回答

7

您可以执行读取权限,如CouchDB Authorization on a Per-Database Basis中所述。

对于写权限,你可以使用验证功能上CouchDB The Definitive Guide - Security描述。

你可以为每个项目创建一个数据库和执行权限存在,那么所有的数据在用户之间共享效率。如果用户自己共享Feed并且需要相关权限,则可以将用户变成“项目”,这样适用于任何地方的相同逻辑。

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

+0

不幸的是,每个项目的权限模型是不是我需要足够的细粒度(我需要一些用户只看到一些属于某个项目的项目)。 –

4

除了(如victorsavu3建议已经提供)在您的应用程序和沙发之间的代理中处理读取身份验证之外,我只能想到另外两种替代方案。

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

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

+1

磁盘空间很便宜 - 是的,但在我的情况下,这最终会导致使用磁盘空间的很多*,所以我决定不走这条路。 拆分数据库 - 我也考虑过这个问题......但我相信这样做会比在CouchDB之上运行一个处理身份验证的瘦服务器更复杂。 –

+0

是的,这也是一个很好的解决方案。 – smathy

相关问题