将 Plone 用户和组迁移到关系数据

Migrate Plone users and groups to relational data

我有一个 Plone 4 站点,其中包含许多存储在 ZODB 中的用户和组。随着时间的推移,我们添加了一些使用关系数据(在 PostgreSQL 数据库中)的功能;一些 table 具有包含用户或组 ID 的字段。

但是,目前用户和组是在 ZODB 而不是 RDB 中定义的,所以我们这里没有合适的外键。因此,显而易见的想法是将用户和组数据迁移到 RDB - 那些 who/which 至少被 Plone 站点使用;我假设紧急用户需要是一个例外(但无论如何他们都不是任何组的成员)。

这是一件好事吗?

是否有理由只做部分,还是我应该转让包括群组成员资格在内的所有内容? (由于成员资格存储为包含组的用户列表(and/or 组),我可以想象一个反向 table 包含用户所属的所有组,并由触发函数维护.)

有什么特殊的工具可以使用吗?

谢谢!

您要找的工具是https://pypi.python.org/pypi/pas.plugins.sqlalchemy/0.3

我已经在用户 "shared" 使用时事通讯系统的门户网站中使用了它。 我有 200 个用户和任何问题。

我认为唯一 "good reason" 将用户存储在外部数据库中而不是 zodb/plone 是在像我这样的用例中。

您是否考虑过 "extend" 克隆用户(例如 https://plone.org/products/collective.examples.userdata)?使用 plone.api,您可以轻松地在代码中操纵用户的属性。

恕我直言,这取决于您想要实现的目标。在 Plone 中你有 PAS,所以从技术上讲,你把用户、组和用户组关系放在哪里并不重要。

您可以将 users/groups 存储在:

还有很多其他的 AUTH 插件,比如 RPX、Goolge+ 等

您可以通过 PAS 启用、禁用和修改每个插件的行为。

不使用 Plone 用户有意义吗?

当然,如果你想共享用户凭证(例如LDAP),或者如果你需要其他应用程序中的用户信息等。

迁移

如果您使用的 PAS 插件支持 "Properties" 和 "User enumeration",应该会很简单。

从一个插件获取数据,然后使用简单的 python 脚本将数据放入另一个插件。两者都支持相同的API。