CouchDB / PouchDB部分同步,权限有限

时间:2016-04-27 22:16:26

标签: synchronization couchdb pouchdb access-rights

我偶然发现了CouchDB和PouchDB同步功能。通常,Web应用程序具有实现身份验证,权限和业务逻辑的应用程序服务器,允许限制用户访问特定资源/记录。这引出了我的几个问题:

  1. 是否可以限制对沙发数据库内记录的访问。例如。超级管理员看到一切,部门经理看到他所在部门的一切,而一个简单的用户只看到他自己的记录,例如分配给他的任务?
  2. CouchDB + PouchDB是否只能进行部分同步。例如同步我负责的所有任务?
  3. 您是否会使用CouchDB进行用户身份验证和权限存储(针对上述用例)?似乎无论如何我都很奇怪,因为在我看来,每个人都可以访问用户数据库。

2 个答案:

答案 0 :(得分:1)

  

是否可以限制对沙发数据库内记录的访问。例如。超级管理员看到一切,部门经理看到他所在部门的一切,而一个简单的用户只看到他自己的记录,例如分配给他的任务?

不。您无法使用单个数据库并仅使用CouchDB执行此操作。 但是有几种方法可以实现这一点,例如:

  • 按项目/用户组/用户使用数据库。在大多数情况下,这可能是首选方法。在CouchDB中创建数据库很容易。它也最适合同步
  • 创建一个智能代理,使用用户凭据包装所有文档并过滤所有结果
  • 基于每个用户加密文档
  • 使用validate_doc_read和validate_doc_update函数

此处有更多信息:https://wiki.apache.org/couchdb/PerDocumentAuthorization

答案 1 :(得分:0)

  

是否可以限制对沙发数据库内记录的访问。例如。超级管理员看到一切,部门经理看到他所在部门的一切,而一个简单的用户只看到自己的记录,例如分配给他的任务?

现成的安全策略非常基础,但您可以使用高级功能很多

您想要做的只是使用show function,只会根据req.userCtx生成不同的输出。

在不同的设置中(基于用户/方法/ URI的授权,有或没有第三方认证),因为CouchDB完全符合REST,您还可以使用HTTP反向代理来实现与安全相关的功能。

  

CouchDB + PouchDB是否只能进行部分同步。例如同步我负责的所有任务?

在CouchDB中,这称为"filtered replications"

  

无论如何我似乎很奇怪,因为在我看来,用户数据库可以从所有人访问。

当然不是。在普通模式(不是“管理员”)中,其他用户只能访问“公共”属性,当然,只有用户自己才能更新用户文档(参见documentation)。