我想实现一个webapp - 一个整合来自各种来源的数据并将其显示给用户的Feed。用户应该只能看到他有权阅读的订阅源项(例如,因为它们属于他所属的项目)。但是,许多用户可能(并且将)可以看到提要项目。
我真的很想使用CouchDB(主要是因为很酷的_changes feed和map / reduce视图)。我正在考虑将应用程序实现为纯粹的couchapp,但我遇到了权限模型的问题。 AFAIK,CouchDB中没有每个文档的权限,这通常使用每用户数据库和复制来实现。
但是当各个用户看到的内容之间存在很多重叠时,这会引入很多开销...这些东西会在整个地方被复制并在许多数据库中重复。我喜欢这种方法的优雅,但是巨大的开销感觉就像一个破坏者...(假设我有50个用户,他们都看到相同的数据......)。
请问有什么想法吗?替代解决方案?
答案 0 :(得分:7)
您可以按CouchDB Authorization on a Per-Database Basis。
中所述强制执行读取权限对于写入权限,您可以使用CouchDB The Definitive Guide - Security中描述的验证功能。
您可以为每个项目创建一个数据库并在那里强制执行权限,然后在用户之间有效地共享所有数据。如果用户自己共享一个提要并且也需要权限,那么你可以让用户进入“项目”,这样就可以在任何地方使用相同的逻辑。
使用此设计,您可以为每个项目授权用户或一组用户(角色)。
答案 1 :(得分:4)
除了(因为victorsavu3已建议)在您的应用和沙发之间的代理中处理您的读取身份验证,我只能想到其他两种选择。
首先是不关心,磁盘很便宜并且拥有多个数据副本可能看起来像很多不必要的重复,但它大大简化了您的架构,并且您可以获得一些自动优势,例如轻松扩展以处理负载(通过只是将一些用户的数据库移到其他服务器上。
其次是将共享数据拆分为不同的数据库。这有时会限制你在视图中可以做的事情(例如,没有“链接文档”),但在许多情况下这不是什么大问题。