Security 如何防止匿名用户在couchDB中删除/编辑我的文档?

Security 如何防止匿名用户在couchDB中删除/编辑我的文档?,security,function,validation,couchdb,Security,Function,Validation,Couchdb,我知道CouchDB不允许非管理员用户编辑/删除设计文档,但如何防止他们编辑/删除所有文档 我能找到的唯一信息是,可以使用验证功能设置用户权限。我对如何编写验证函数来实现这一点/验证函数的位置有点困惑。它们都在用户数据库中吗 谢谢这很简单:只需在数据库中使用函数创建设计文档,您可以在其中控制执行以下操作的文档: function(newDoc, oldDoc, userCtx, secObj){ if('_admin' in userCtx.roles) return; // skip

我知道CouchDB不允许非管理员用户编辑/删除设计文档,但如何防止他们编辑/删除所有文档

我能找到的唯一信息是,可以使用验证功能设置用户权限。我对如何编写验证函数来实现这一点/验证函数的位置有点困惑。它们都在用户数据库中吗


谢谢

这很简单:只需在数据库中使用函数创建设计文档,您可以在其中控制执行以下操作的文档:

function(newDoc, oldDoc, userCtx, secObj){ 
    if('_admin' in userCtx.roles) return; // skip anonymous in Admin Party case;
    if(!userCtx.name && newDoc._deleted){
      throw({'forbidden': 'auth first before delete something'});
    }
}
想法很简单:如果没有指定名称,这意味着用户是匿名的,如果我们的新文档版本有特殊字段
\u deleted
设置为
true
,文档将被删除(但更改尚未保存在磁盘上)。所以我们检查这些字段,并在条件满足时抛出一个禁止的异常。我们也对管理员聚会例外,因为每个人都不知道姓名,但是有
\u Admin
角色,所以我们需要跳过他们。现在,如果匿名用户试图删除常规文档,他将收到下一个HTTP响应:

HTTP/1.1 403 Forbidden
Server: CouchDB/1.3.0 (Erlang OTP/R15B03)
Date: Thu, 25 Apr 2013 18:48:51 GMT
Content-Type: application/json
Content-Length: 68
Cache-Control: must-revalidate

{"error":"forbidden","reason":"auth first before delete something"}

另一种限制对数据库访问的方法是将
[coach\u httpd\u auth]
配置为
require\u valid\u user:true


然后,每个请求都必须发送凭据才能登录到您的couchdb。

谢谢!非常有用的答案!对于我的用例,这比公认的答案更简单、更有效。我的目标是阻止所有匿名访问,而不仅仅是针对特定文档的特定操作。这个答案就是这样。