Bonjour, Voici un petit mail qui explique le fonctionnement actuel du moteur de recherche et les problématiques rencontrées. Actuellement ------------ On dispose de 7 index lucene différents (Stations, Spécimens, Lots, Extractions, Purifications, Tests biologiques, Molécules), tous indépendamment et gérés par hibernate search. Chaque index doit contenir l'ensemble des informations nécessaires à la recherche, y compris donc les informations portant sur les entités associées à l'entité indexée. Exemple d'indexation de lot (= un document lucene) : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ idExtraction:585 lot.campagne.idCampagne:14 lot.campagne.nom:TEST-CAMPAGNE lot.createur.idPersonne:2 lot.idLot:285 lot.ref:R3059 lot.specimenRef.embranchement lot.specimenRef.espece lot.specimenRef.famille lot.specimenRef.genre lot.specimenRef.idSpecimen:182 lot.specimenRef.ref:REF0001 lot.station.codePays lot.station.campagnes.idCampagne:14 lot.station.campagnes.nom:TEST-CAMPAGNE lot.station.createur.idPersonne:2 lot.station.idStation:24 lot.station.localite lot.station.nom ref:FF-S14 Dans un document d'extraction (= un résultat de recherche) il y a donc toutes les informations nécessaire à la recherche. Sécurité -------- Dans le premier essai d'implantation de la sécurité, les permissions était ajouter à l'indexation à chaque document lucene. La permission dans l'index autorisant ou non l'utilisateur faisant la recherche à pouvoir voir le résultat ou non. Exemple d'indexation de la sécurité ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ idExtraction:585 [...] droit.pk2:42 droit.pk2:35 droit.pk2:511 Si l'utilisateur qui fait la recherche a son identifiant qui figure dans le document lucene, il a le droit de voir le résultat. Problématique d'indexation ~~~~~~~~~~~~~~~~~~~~~~~~~~ La première problématique de cette approche est que, lors de la modification des droits, il faut reindexer, tout ce qui dépend des droits, soit les lot et les campagnes, et tout ce qui dépend à son tour des lots de des campagnes. Lors de l'ajout d'un droit sur une campagne, il faut reindexer toutes la base de données actuellement, car il n'y a qu'une campagne. Problématique de recherche ~~~~~~~~~~~~~~~~~~~~~~~~~~ Une autre problématique est que pour faire la recherche, il ne faut pas vraiment autoriser ou pas la vision sur un résultat, mais plutôt autoriser la recherche sur les champs du document que l'utilisateur à le droit de requête. Par exemple, si une molécule apparait dans plusieurs lots: produit.lot.ref:R42 produit.lot.ref:R101 produit.lot.ref:R102 produit.lot.speciment.genre:Ircinia produit.lot.speciment.genre:Batzella produit.lot.speciment.genre:Melophlus produit.lot.speciment.expece:excavans produit.lot.speciment.expece:sarassinorum produit.lot.speciment.expece:carteri L'utilisateur n'ayant les droits que sur 1 seul des trois lots dans lesquels apparait la molécule, il n'a pas le droit de se servir de tous les champs pour faire la recherche. Piste ----- Le problème est maintenant d'essayer de trouver une nouvelle façon d'implementer le moteur de recherche: - qui ne reindexe pas la base de données à chaque modification des droits - qui corrige le problème des droits pendant la recherche - qui puisse potentiellement s'adapter à hibernate search Piste de réflexion: - ne pas indexer la sécurité dans le moteur de recherche - ne plus utiliser hibernate search - ... Cordialement, Eric Chatellier. -- Éric Chatellier - Code Lutin Tel: 02.40.50.29.28 - http://www.codelutin.com