Salut Eric,

J'ai remonté comme toi la trace d'exécution et ai également bien constaté qu'à la fois la molécule (et par conséquent MoleculeProvenance)  et l'utilisateur (et par conséquent CampagneDroits pour cet exemple)  étaient bien chargés dans la même session. Je suis autant étonné que toi de voir qu'hibernate charge alors distinctement deux objets différents pour les mêmes campagnes. Il doit y avoir quelque chose qui nous échappe, il faudrait regarder davantage ce qui se passe dans les logs d'Hibernate.

J'ai trouvé une correction toutefois assez simple dans la vérification des droits en utilisant un containsWithValue qui se base sur idCampagne plutôt qu'un contains. Cela donne pour les campagnesDroits (faire de même pour les campagnesCrees, campagnesDroits et lotsDroits) :
// accessible si l'utilisateur a le droit à la campagne
        if (CollectionTools.containsWithValue(utilisateur.getCampagnesDroits().keySet(), "idCampagne",
                BeanTools.AccessType.GETTER, lot.getCampagne().getIdCampagne())) {
            return true;
        }
Il faudrait vérifier également plus haut que lot.getCreateur() est bien chargé dans le même objet qu'utilisateur...

Si tu trouves pourquoi les objects ne sont pas chargés dans la même instance, mieux vaut toutefois garder le code initial : il sera plus performant.

Adrien

Le 29/04/2013 20:59, Eric Chatellier a écrit :
Le 29/04/2013 10:44, Adrien Cheype a écrit :
Bonjour,

Je n'ai pas eu le temps de regarder cela de près mais j'ai du mal à comprendre
pourquoi le bug ne se produit alors qu'avec un utilisateur non administrateur...
Les droits ne sont pas vérifié pour l'admin:
http://forge.codelutin.com/projects/cantharella/repository/entry/trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java#L159
Peux-tu me donner le numéros de ligne ou les comparaisons (implicites) et
chargements s'effectuent ? Bien que j'aurai peu de temps, j'essaierai d'y
jeter un oeil.
Le chargement est ici:
http://forge.codelutin.com/projects/cantharella/repository/entry/trunk/cantharella.web/src/main/java/nc/ird/cantharella/web/pages/domain/molecule/ReadMoleculePage.java#L227
et la gestion des droits:
http://forge.codelutin.com/projects/cantharella/repository/entry/trunk/cantharella.service/src/main/java/nc/ird/cantharella/service/services/impl/LotServiceImpl.java#L159



--
Adrien Cheype
Ingénieur en Systèmes d'Information
Service « Informatique Scientifique et Appui aux Partenaires du Sud »
Direction du Système d'Information (DSI)
http://www.ird.fr/dsi/
http://www.ird.fr/informatique-scientifique/

INSTITUT DE RECHERCHE POUR LE DEVELOPPEMENT
BP A5 - 98848 Nouméa - Nouvelle Calédonie
Tél. +687 260 789