CouchDB 对 CRUD 事件的验证

CouchDB validation on CRUD events

我正在尝试为 CouchDB 编写一个验证函数,如果使用的 HTTP 方法是 post(类似于 CRUD 术语中的 CREATE 事件),它应该只 运行。

这是我的代码:

function(newDoc, oldDoc, userCtx) {
  if (newDoc.type == "post") {
    throw({forbidden : 'no way'});
  }
}

我将其放入设计文档中,如下所示:

{
  "_id": "_design/delete",
  "_rev": "7-6bd645d2412fea53011a480d71590ff8",
  "validate_doc_update": "function(newDoc, oldDoc, userCtx) {if (newDoc.type == 'post') {throw({forbidden : 'no way'});}}"
}

我预计它会拒绝创建我尝试添加到数据库的任何新文档。但由于某种原因,该功能似乎根本没有被触发。

我猜我对 post 方法的使用检查不正确。有人看到我做错了什么吗?

对于那些来到这里需要检查存储在 CouchDB 数据库中的文档的 CRUD 事件的人。我做了一些实验来定义如何检查 CouchDB 设计文档中的每个 CRUD 事件。

我想到了这个解决方案(这些可以在 if 语句的条件中使用):

创建

newDoc !== null && oldDoc === null

阅读

通过将用户添加到数据库来实现。

对于基于每个用户的读取限制,请阅读:CouchDB - prevent unauthorized reads

更新

newDoc !== null && oldDoc !== null

删除

newDoc._deleted === true