我可以限制未经身份验证的用户访问_all_docs吗?

时间:2011-02-10 04:08:04

标签: couchdb cloudant

我希望人们可以使用带有随机ID的链接私下共享文档,就像我在发送一个私有链接到pastebin后得到的那样。我想知道CouchDB和Cloudant的一般情况。

1 个答案:

答案 0 :(得分:15)

使用Apache CouchDB,读取权限是按数据库,而非每个文档。如果用户可以从数据库中获取文档,则用户也可以获取_all_docs?include_docs=true

我在这个关于CouchDB read authorization的问题中写了详细信息。

有几种方法:

  1. 第7层防火墙或反向HTTP代理。这很难做到正确; IMO对大多数人来说不可行。您必须非常熟悉CouchDB的API,以确保阻止每个可能的查询(例如_rewrite绕过您的过滤器。)

  2. 每个用户一个数据库。这是CouchDB的原生解决方案。创建数据库非常便宜。然后,将用户可以看到的文档复制到他或她的数据库中。用户需要Couch或OAuth帐户的密码。

  3. 我最近在每个用户数据库方面取得了成功,但是URL中的一个唯一键,可以让他们立即访问。感觉就像你想要的东西,但是在幕后,我只是用随机密码创建一次性帐户。该链接转到公共页面,例如www.example.com/pastebin/index.html?doc_id=some_docid&secret=random_secret。然后浏览器上的Javscript将读取window.location并将该密码插入AJAX查询(在Authorization标头中)。 Couch授予许可,用户很满意。不幸的是,这需要一些试验和错误;然而,它主要是简单的网络编程。

相关问题