2016-11-28 4 views
1

Dans ma configuration actuelle, j'utilise Nuxeo avec intégration LDAP et CAS. Maintenant, mon exigence est, pour certains scénarios, un utilisateur télécharge le document après la connexion, mais après un certain laps de temps en raison de la modification de l'entreprise, l'ID utilisateur peut changer pour cet utilisateur, mais restera partie du même locataire. Ainsi, après le changement de l'identifiant de l'utilisateur aussi, l'utilisateur veut voir les documents téléchargés avec l'identifiant d'utilisateur précédent. Un exemple donné ci-dessous.Modifier le propriétaire de tous les documents dans le référentiel

Nom d'utilisateur:

[email protected] -> Téléchargé un nom de document « User1ABC »

[email protected] -> Téléchargé un nom de document « User2ABC »

maintenant Pour des raisons professionnelles, le nom d'utilisateur (nom de domaine) peut changer dans le système.

[email protected] -> Devient [email protected]

[email protected] -> Devient [email protected]

Dans ce scénario aussi user1 user2 & aimeraient voir les documents téléchargés sous le nom d'utilisateur précédent ([email protected] & [email protected]).

Lorsque ce changement de nom de domaine sera applicable à tous les utilisateurs de ce locataire. Alors, comment nous pourrions réaliser ce programme bien que ou avec une autre API.

+0

Comment procédez-vous au changement de nom de domaine? –

+0

Pourriez-vous s'il vous plaît fournir la sortie de 'nuxeoctl showconf'? –

+0

Aucun processus défini pour le changement de domaine. Cela dépend de votre suggestion définira la même chose. – Souvik

Répondre

1

Si c'est une seule migration shot et vous êtes en cours d'exécution avec un dépôt VCS (Postgres par exemple), vous pouvez exécuter la requête suivante sur la table acls:

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

Selon l'endroit où vous stockez vos utilisateurs , vous pouvez automatiser une procédure PLPG/SQL Postgres sur itérer la table des utilisateurs:

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; 

Je n'ai pas testé la fonction (il compile ;-)), mais l'idée est là et devrait fonctionner. Ensuite, redémarrez le serveur Nuxeo afin que tout le cache soit réinitialisé.

+0

Pour ma configuration aucun ensemble de référentiel explicite. Il utilise celui par défaut. J'ai également essayé l'approche mentionnée ci-dessus en remplaçant le nom d'utilisateur dans tous les endroits dans ma table. Avec cette approche, je peux me connecter avec le nouvel utilisateur mais je n'ai pas pu voir le document téléchargé par l'utilisateur avant que le nom d'utilisateur ne change. – Souvik

+0

Donc, si votre table est dans Postgres, vous devriez aussi lancer la fonction nx_rebuild_read_acls(). En H2 (Impl implicite), il n'y a pas d'optimisation de lecture ACL donc cela ne devrait pas être obligatoire. –

+0

J'utilise mysql. – Souvik