PouchDB + CouchDB 用于具有权限管理的离线公司应用程序(IBM Domino 替换)

Posted

技术标签:

【中文标题】PouchDB + CouchDB 用于具有权限管理的离线公司应用程序(IBM Domino 替换)【英文标题】:PouchDB + CouchDB for offline companies application with rights management (IBM Domino replace) 【发布时间】:2017-09-15 11:30:10 【问题描述】:

在我的公司,我们使用 IBM Domino 已有十多年了。我们使用它来构建具有复制支持的离线应用程序。它运行良好,但我们需要使用 IBM Notes 客户端来启用此功能,并且它不适用于移动设备(当然,Windows 笔记本电脑除外)。

我正在寻找其他解决方案来构建离线优先和多支持 (Web) 应用程序。我认为 CouchDB + PouchDB 是最好的解决方案。但是要替换Domino,我必须替换授权功能。

Domino 在数据库 ACL 中具有许多级别的权限(经理、设计者、作者、作家、读者……)。 对于每个文档,我们可以添加一个reader和一个author字段来限制谁可以写和读文档。

例如,我们在 CRM 中使用 Domino,员工可以读取(和写入)他的客户以及在公司层次结构中低于他的员工的客户。他还可以查看其地理区域内的客户(不写)。

为了在 Domino 中执行此操作,我们(每晚)计算每个客户文档中的读者和作者字段。我怎样才能在 CouchDB 中实现这样的目标?有可能吗?

我读到了很多可能性:

与显示或过滤功能部分同步 (CouchDB / PouchDB partial syncs with limited rights) 每个用户一个数据库。 (在我的情况下如何拆分数据库?) 使用像covercouch这样的代理应用来管理ACL (https://github.com/ermouth/covercouch) 开发我自己的代理,在哪里可以实现过滤功能以满足我的需求?

解决上述问题的最佳解决方案是什么?

【问题讨论】:

你说得对,我在上面指定了我的问题。 改进很多。谢谢! 【参考方案1】:

Apache CouchDB 没有每个文档的权限。虽然您可以使用过滤复制仅复制一部分数据,但您不应将过滤复制作为访问管理的一种形式。目前,您唯一真正可行的选择是采用每个用户一个数据库的方法。你有几个选择:

在 Apache CouchDB 2.0 中使用 couch_peruser configuration option,这将为在 _users 数据库中创建的每个用户创建一个数据库,并授予该用户读写自己数据库的权限。 推出您自己的方案,基本上与上述相同。 使用Cloudant Envoy,它允许您向复制目标(例如 PouchDB)提供每个用户一个数据库的错觉,同时实际将所有这些数据存储在一个数据库中。查看 Cloudant Envoy 应用程序的身份验证,Part I 和 Part II,了解有关如何使用 Cloudant Envoy 的更多详细信息。 使用Hoodie。 Hoodie 是 Offline First 应用程序的完整后端,利用服务器上的 Apache CouchDB 和客户端上的 PouchDB。 Hoodie 提供用于管理用户、持久化数据、同步数据和许多其他功能的 API。

【讨论】:

以上是关于PouchDB + CouchDB 用于具有权限管理的离线公司应用程序(IBM Domino 替换)的主要内容,如果未能解决你的问题,请参考以下文章

在 CouchDB/PouchDB-Server 中重写 URL

PouchDB 复制在复制时抛出错误

typescript 提供者数据库pour fonctionner avec PouchDB et couchDB

将 PouchDB 与 MongoDB 一起使用

用户角色的 Couchdb/Couchdb 复制策略

PouchDB 和 SvelteKit