【发布时间】:2011-04-01 16:29:29
【问题描述】:
我正在考虑在 CouchDB 中移植一个网站,它看起来很有趣。
然而,一个大问题是 CouchDB 似乎不支持读认证;所有读者都可以访问数据库中的所有文档。
建议elsewhere 为不同的读者组使用不同的数据库或在另一个(中间)层中实现读者身份验证,对于这个访问由复杂的每个文档 ACL 确定的项目来说,这两种方法都不是一个选项.
我正在考虑在 lists 中实现身份验证,并将对 CouchDb 的所有访问权限限制在这些列表中。这个限制可以通过 Apache 中用作反向代理的简单 mod_rewrite 子句来强制执行。列表将简单地获取行并根据文档的 ACL 检查 userCtx。比如:
function(head, req) {
var row;
while (row = getRow()) {
if (row.value.ACL[req.userCtx.name])
send(row.value);
else
throw({unauthorized : "You are not allowed to access this resource"});
}
由于我没有使用 CouchDB 的经验,也没有在任何地方读到过这种方法,我想知道这种方法是否可行。
这是实现读取访问的一种方式,还是我出于错误目的滥用列表?我不应该期望 CouchDB 可以提供如此简单的解决方案吗?
【问题讨论】:
-
看看github.com/ermouth/covercouch——它实现了读取 ACL,保持原始 CouchDB REST API 不变。