我希望人们能够使用带有随机 id 的链接私下共享文档,就像我在将私人链接发布到 pastebin 后得到的那样。我想知道 CouchDB 和 Cloudant 的一般情况。
1 回答
使用 Apache CouchDB,读取权限是每个数据库,而不是每个文档。如果用户可以从数据库中获取文档,那么用户也可以获取_all_docs?include_docs=true
。
我在这个问题中写了关于CouchDB 读取授权的详细信息。
有几种方法:
第 7 层防火墙或反向 HTTP 代理。这很难正确地做到;IMO 对大多数人来说是不可行的。您必须非常熟悉 CouchDB 的 API,以确保阻止所有可能的查询(例如
_rewrite
绕过您的过滤器)。每个用户一个数据库。这是 CouchDB 的原生解决方案。创建数据库非常便宜。然后,将用户可以看到的文档复制到他或她的数据库中。用户需要 Couch 上的密码或 OAuth 帐户。
我最近在每用户数据库方面取得了成功,但在 URL 中也有一个唯一键,可以让他们立即访问。感觉就像你想要的东西,但在幕后我只是用随机密码创建一次性帐户。该链接转到公共页面,例如
www.example.com/pastebin/index.html?doc_id=some_docid&secret=random_secret
. 然后浏览器上的 Javscript 将读取window.location
该密码并将其插入 AJAX 查询(在 Authorization 标头中)。Couch 授予权限,用户很高兴。不幸的是,这需要一些尝试和错误。然而,它主要是简单的网络编程。