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/canth... 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/canth... et la gestion des droits: http://forge.codelutin.com/projects/cantharella/repository/entry/trunk/canth...
-- 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