AnsweredAssumed Answered

Modifier les permissions à la création d'un NodeRef

Question asked by amandine.b on Aug 3, 2015
Latest reply on Dec 7, 2015 by cleseach
Bonjour,

Je développe actuellement un traitement permettant de générer un PDF à partir d'un NodeRef existant, puis de modifier les droits sur le NodeRef du PDF généré.
Lors de la modification des droits, une partie n'est pas réalisé : je souhaite ajouter des droits en lecture et supprimer les droits d'héritage, mais à l'exécution, les droits en lecture sont bien ajoutés mais l'héritage n'est pas désactivé.

Voici ma fonction de modification des droits :

private void droitsDuPDF() {
   PermissionService permissionService = getServiceRegistry().getPermissionService();

   // Suppression des droits sur le fichier
   permissionService.deletePermissions(nodePDF);
   permissionService.setInheritParentPermissions(nodePDF, false);

   // Récupération du répertoire parent
   ChildAssociationRef caRepertoire = nodeService.getPrimaryParent(nodeOrigine);
   NodeRef repertoire = caRepertoire.getParentRef();

   // Récupération des groupes ayant des droits sur l'espace
   Set<AccessPermission> droitsRepertoire = permissionService.getAllSetPermissions(repertoire);

   // Ajout des droits en lecture sur le PDF, pour chaque groupe récupéré du répertoire
   for (AccessPermission permission : droitsRepertoire) {
      permissionService.setPermission(nodePDF,permission.getAuthority(),PermissionService.CONSUMER, true);
   }
}


Lors de l'exécution, le nodePDF contient bien une référence de NodeRef. Néanmoins, toujours pendant l'exécution, quand je recherche ce nodeRef via le navigateur de noeud, je n'obtiens pas de résultat (il ne trouve pas mon nodeRef). Une fois le traitement global terminé, je relance la recherche et là le nodeRef apparaît dans le navigateur de noeud.

J'ai tenté de lancer ma fonction de génération de PDF dans un transaction helper, afin de commit le nodeRef quand il est créé, mais sans amélioration :

   private NodeRef convertToPdf() throws Exception  {

      RetryingTransactionCallback<Object> txnWork = new RetryingTransactionCallback<Object>() {
         @Override
         public Object execute() throws Exception
         {
            //mon traitement
         }
      };
      TransactionService transactionService = getServiceRegistry().getTransactionService();
      NodeRef child = (NodeRef) transactionService.getRetryingTransactionHelper().doInTransaction(txnWork, true);

      return child;
   }


Je précise également que mon traitement global est lancé avec "AuthenticationUtil.runAsSystem".

Auriez-vous une idée pour résoudre ce problème ?

Je travaille sur la version 4.0.2 Entreprise d'Alfresco.

Merci d'avance !

Outcomes