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

Posted

技术标签:

【中文标题】用户角色的 Couchdb/Couchdb 复制策略【英文标题】:Couch DB/Pouch DB replication strategy by user roles 【发布时间】:2015-08-18 23:44:06 【问题描述】:

我正在设计一个用于任务管理的移动应用(待办事项列表和许多额外的好东西),它可以离线使用并在重新连接时同步。我对 Couch 和 Pouch DB 印象深刻,但仍然不确定数据库和角色的最佳结构。我的情况是,一个用户可以有许多任务,并且可以直接或通过将任务分配给一个组然后与特定用户共享该组来将任务共享给许多其他用户(只读)。

阅读以下问题后: CouchDB replication strategy with dynamic groups of users 我想我可能不允许直接共享任务,只允许通过群组共享。然后每个组实际上都是 Couch 中的一个角色,然后我可以管理对它的授权。我可以从我的网络应用程序编写一个 API,以便移动用户可以获取共享给他们的组列表,然后设置从每个基于 DB 的组到他们本地 Pouch DB 的单向复制。每个用户还可以通过从 Pouch 到 Couch 的双向同步对他们自己的任务的数据库进行读写访问。将从他们自己的 Couch 数据库到任务所属的每个基于角色的数据库进行过滤复制。

我的主要问题是:

    这是一个有效的结构,还是我的逻辑中的缺陷会使这变得困难? 当用户从组/角色中删除时,最好的处理方法是什么,以及由于组不再与他们共享(他们不再拥有该组),如何删除本地 Pouch DB 上任何以前复制的任务角色)? 用户可能会删除一个组,这意味着需要删除整个基于角色的数据库 - 这有什么影响吗?

【问题讨论】:

【参考方案1】:

好问题,保罗!最近似乎不断出现这种情况。 :)

这是一个有效的结构,还是我的逻辑中存在使这变得困难的缺陷?

我想是的。我发布了一个architecture diagram 作为对类似的以移动为中心(在这种情况下为 Cordova + PouchDB)工作流程的答案。

当用户从组/角色中删除时,最好的处理方法是什么,以及如何删除他们本地 Pouch DB 上的任何以前复制的任务,因为组不再与他们共享(他们不再拥有那个角色)?

可能最好的方法是使用用户数据库上的视图来查找与共享/组相关的所有文档,然后使用后台进程(或类似的进程)删除这些文档(以节省空间;如果您需要到)。

您可以使用批量文档系统 in PouchDB or CouchDB 并在文档上设置 "_deleted": true - 这应该会简化删除过程。

用户可能会删除一个组,这意味着需要删除整个基于角色的数据库 - 这有什么影响吗?

请务必同时删除复制任务,以避免在数据库消失后复制失败。否则,你应该没问题(据我所知)。

希望有帮助!

【讨论】:

感谢@BigBlueHat。这有帮助,我想我现在已经足够了。希望我能让一切顺利,完成后我会发布最终设计的图表。 谢谢!很高兴看到并可能帮助其他人。编码愉快!

以上是关于用户角色的 Couchdb/Couchdb 复制策略的主要内容,如果未能解决你的问题,请参考以下文章

我的 aws 角色的信任策略有啥问题,它不能被假定为跨账户?

如何将用户角色从授权服务器复制到下游微服务?

如何检查用户是不是具有特定角色 discord.js v12? [复制]

如何仅为特定用户和角色显示和复制文档?

如何根据用户角色(尤其是可变产品)显示不同的产品价格? [复制]

设计模式--策略模式