更改存储库中所有文档的所有者

时间:2016-11-28 20:10:54

标签: nuxeo

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

用户名:

user1@abc.com - >上传了文档名称“User1ABC”

user2@abc.com - >上传了文档名称“User2ABC”

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

user1@abc.com - >成为user1@xyz.com

user2@abc.com - >成为user2@xyz.com

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

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

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

1 个答案:

答案 0 :(得分: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服务器,以便重置所有缓存。