2016-11-28 2 views
1

В моей текущей настройке я использую Nuxeo с интеграцией LDAP и CAS. Теперь мое требование заключается в том, что для некоторых сценариев один пользователь загружает документ после входа в систему, но через определенный промежуток времени из-за смены компании идентификатор пользователя может измениться для этого пользователя, но останется частью одного и того же арендатора. Таким образом, после изменения идентификатора пользователя пользователь хочет увидеть документы, загруженные с более ранним идентификатором пользователя. Пример, приведенный ниже.Изменение владельца всего документа в репозитории

Имя пользователя:

[email protected] -> Загрузил имя документа «User1ABC»

[email protected] -> Загрузил имя документа «User2ABC»

сейчас из-за необходимости ведения бизнеса имя пользователя (доменное имя) может измениться в системе.

[email protected] -> Становится [email protected]

[email protected] -> Становится [email protected]

В этом случае также в user1 user2 & хотел бы видеть документы, загруженные во время более раннего имени пользователя ([email protected] & [email protected]).

, когда это изменение имени домена будет применимо для всех пользователей этого арендатора.

Итак, как мы могли бы достичь этой программы или с помощью какого-либо другого API.

+0

Как вы изменяете имя домена? –

+0

Не могли бы вы предоставить вывод 'nuxeoctl showconf'? –

+0

Для изменения домена процесс не определен. В зависимости от вашего предложения будет определено то же самое. – Souvik

ответ

1

Если это одна миграция выстрел, и вы работаете с хранилищем VCS (Postgres например), вы можете выполнить следующий запрос на acls таблице:

UPDATE acls SET user="[email protected]" WHERE user = "[email protected]" 

В зависимости от того, где вы храните ваши пользователи вы можете автоматизировать это с 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, чтобы весь кеш был сброшен.

+0

Для моей конфигурации нет явного набора репозитория. Он использует значение по умолчанию. Я также попробовал вышеупомянутый подход, заменив имя пользователя во всех местах моей таблицы. При таком подходе я могу войти в систему с новым пользователем, но не смог увидеть документ, загруженный пользователем до изменения имени пользователя. – Souvik

+0

Итак, если ваша таблица находится в Postgres, вы также должны запустить функцию nx_rebuild_read_acls(). В H2 (по умолчанию impl) отсутствует оптимизация acls для чтения, поэтому она не должна быть обязательной. –

+0

Я использую mysql. – Souvik

Смежные вопросы