我要写一个过滤功能CouchDB
服务器端过滤特定于用户的文档。此过滤器将只允许复制特定用户有权访问的少数选定文档,而不是复制 TB 大小的整个数据库。
在这里我发现了一个类似的问题CouchDB:限制用户只能复制自己的文档 https://stackoverflow.com/questions/12773554/couchdb-restricting-users-to-only-replicating-their-own-documents但它没有为我提供我需要的信息。
所以我的问题仍然是:
- 指定此类过滤器的最佳方法是什么?
- 我应该如何编写这样的过滤功能,有书面示例吗?
-
我应该在每个文档中包含哪些内容,以便过滤器能够以这种方式工作:
在社交网络的上下文中,假设您想要从服务器获取用户数据(例如图片),在这种情况下,包含图片的文档将保存userId
在里面。但有时可能会出现这样的情况:此人的朋友会访问他的个人资料,然后他们也可以查看这些照片。在这种情况下,每当朋友访问他的个人资料时,图片文档就会被复制给该朋友,他也将能够查看这些图片。
我怎样才能完成这样的过滤器?
更多信息: 在移动平台端我使用 CouchbaseLite,在服务器端我使用 CouchDB。我只想在移动平台上过滤文档。
CouchDB 过滤器函数只能访问正在过滤的单个文档,因此您无法使用其他文档中的任何信息。这排除了“类似加入”的方法,例如从照片发布文档取消引用到所有者文档以查找所有者的朋友列表。
基本上,您必须在每个文档中包含一个属性,该属性列出了应该获取该属性的确切用户集。
另请注意,这不提供任何类型的访问控制。无法有选择地拒绝对 CouchDB 中文档的读取访问,因此您无法阻止用户查看陌生人的相册。为此,您必须采用每个用户数据库的方法,该方法有其自身的缺点 - 您最终必须在数据库之间设置大量复制以在它们之间共享文档,这不能很好地扩展。
看一下 Couchbase 同步网关 (https://github.com/couchbase/sync_gateway https://github.com/couchbase/sync_gateway)——它与 CouchDB 复制兼容,但添加了能够实现这种选择性同步和访问控制的功能。用它来实现社交网络绝对是可行的;这是我们设计它时考虑到的用例之一。 (我是该项目的首席工程师。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)