les formulaires d'édition de contenu ne tiennent pas compte du chekWrite d'un datacontroller

Sébastien Raphel · le 24/07/13 à 16:56

Bonjour le support (et les autres aussi),

je rencontre une anomalie sur JCMS, en voici la description :

Contexte : JCMS 7.1.1

Description du besoin fonctionnel :

Pour les contenus de type « DossierX », la suppression n’est possible que par leur auteur ET si le contenu est dans l’état initial du workflow.

Mise en place :

-         Développement d’un dataController associé (dans un module) au type de contenu « DossierX »

-         Surcharge de la méthode checkWrite() :

  • Si op = DELETE
    • Si le membre n’est pas l’auteur
      • Renvoie ControllerStatus.FORBIDDEN
    • Sinon si le contenu n’est pas dans l’état initial
      • Renvoie ControllerStatus.FORBIDDEN

 

Bref je ne mets pas tout l’algo mais il fonctionne bien : en front-office comme en back-office pour un DossierX, le menu contextuel affiche ou non le lien « supprimer » en suivant la règle fonctionnelle. C'est OK !

 

Description de l’anomalie :

Contrairement au menu contextuel du contenu, le formulaire d’édition ne tient pas compte du dataController et affiche le lien « supprimer ». Un clic sur ce lien nous amène sur la page de login car le dataController est déclenché et passe dans le checkWrite.

Donc le menu contextuel tient compte des « checkWrite » pour l’affichage des liens d’options. Le formulaire d’édition lui n’en tient compte que lors de l’action en elle-même. Pour moi ces 2 comportements ne sont pas homogènes et je pense que le formulaire d’édition devrait tenir compte du checkWrite et griser le lien « supprimer »

 

Qu’en pensez-vous ? me confirmez-vous ce comportement et le fait que c’est une anomalie JCMS ? y at-il un correctif ?

 

D’avance merci

1 pt
Olivier Jaquemet · le 25/07/13 à 18:16

Bonjour Sébastien,

Merci pour la complétude de ta question.

  • Le code qui sert à l'affichage du menu contextuel utilise pub.checkDelete(mbr), qui invoque notamment mbr.canDeleteOther(pub)
  • Le code qui sert à l'affichege du lien supprimer dans le formulaire d'édition utilise directement mbr.canDeleteOther(pub)

Il s'agit donc bien d'un bug, que je viens de saisir pour correction dans les prochaines versions de maintenance : http://issues.jalios.com/browse/JCMS-3711

Tu peux le contourner en implémentant ton controle dans un RightPolicyFilter sur la méthode RightPolicyFilter#canDeleteOther(boolean, Member, Data)

4 pts
Sébastien Raphel · le 21/01/14 à 09:44

au fait : merci Olivier :)

0 pt