我想知道如何构建一个用户能够向其他用户发送消息的系统.当然,每个人都需要只能访问他的收件箱,因此我们需要每用户数据库基础设施.按照http://guide.couchdb.org/draft/notifications.html中的示例,我们看到用户可以将消息放入收件人的数据库中.简单有效.
但是,如果我们不想让用户知道收件人数据库名称呢?如果我们想要一个通过查看消息文档的to字段(可能是用户名,与其数据库名称完全无关)来解析收件人数据库的系统,该怎么办?
{
"to": "john.kowalski",
"from": "jake.podolski",
"subject": "hi",
"message": "..."
}
Run Code Online (Sandbox Code Playgroud)
对于额外的等级来说,这似乎是一个完美的任务,但那么它就没有乐趣而且不值得提问,所以我们将尝试通过复制来解决它:
但是,这会产生问题,因为主数据库必须对所有用户可见!那么......如果我们能够添加用户 - >主复制任务,那么消息将从用户数据库中传输到主数据库,然后放入收件人数据库(哦,主,它变得越来越复杂,我们可能已经浪费时间试图以这种方式解决它,但让我们试试).
这里的第三步存在问题(没有该步骤,用户将能够通过填写来自字段的虚假信息来发送冒充任何其他用户的消息) - 我们如何能够将其他数据传递给验证函数,这是目前唯一的参数据我所知:
通过调用1.1.0中引入的复制器数据库功能,我们可以将user_ctx上下文传递给复制任务.这个对象是否可以包含自定义数据而不是真实的用户信息?这将如何影响CouchDB处理数据库访问的标准方式?
如果可能,复制任务只会将收件人名称作为user_ctx下的参数填充,则验证函数将使用该值与from字段进行比较.用户无法像其他人一样"发送"消息.