1

在我当前的设置中,我使用 Nuxeo 与 LDAP 和 CAS 集成。现在我的要求是,在某些情况下,一个用户在登录后上传文档,但在一段时间后,由于公司更改,该用户的用户 ID 可能会更改,但仍属于同一租户。因此,在更改用户 ID 后,用户也希望看到使用较早用户 ID 上传的文档。下面给出一个例子。

用户名:

user1@abc.com –> 上传了一个文件名为“User1ABC”</p>

user2@abc.com –> 上传了一个文件名为“User2ABC”</p>

现在由于业务需要,系统中的用户名(域名)可能会发生变化。

user1@abc.com –> 变成 user1@xyz.com

user2@abc.com –> 变成 user2@xyz.com

在这种情况下,用户 1 和用户 2 也希望看到在较早的用户名(user1@abc.com 和 user2@abc.com)期间上传的文档。

当此域名更改时,它将适用于该租户下的所有用户。

那么,我们如何通过程序或其他 API 来实现这一点。

4

1 回答 1

1

如果它是单次迁移并且您正在使用 VCS 存储库(例如 Postgres)运行,您可以在acls表上执行以下请求:

UPDATE acls SET user="user1@xyz.com" WHERE user = "user1@abc.com"

根据您存储用户的位置,您可以使用 Postgres plpg/SQL 过程迭代用户表来自动化:

CREATE OR REPLACE FUNCTION migrate_user(from_domain varchar, to_domain varchar) 
RETURNS integer
AS $$
DECLARE
 u RECORD;
 i int;
BEGIN
    i := 0;
    FOR u IN (SELECT username
                             FROM user
                            WHERE username like '%@'+ from_domain) LOOP

        UPDATE acls SET "user"=replace(u.username,from_domain,to_domain) WHERE user = u.username;
        i := i + 1;
    END LOOP;
    COMMIT;
    # Rebuild the read ACLs optimization
    SELECT nx_rebuild_read_acls();
    RETURN i;
END;
$$ LANGUAGE plpgsql;

我没有测试这个函数(它编译;-)),但这个想法就在这里并且应该可以工作。

之后,重新启动 Nuxeo 服务器,以便重置所有缓存。

于 2016-12-30T18:39:10.130 回答