Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] jAuth, jACL et intégrité des données

Posted by Aline on 06/18/2012 09:37

Bonjour,

Bravo pour votre framework, sur lequel je me penche depuis quelques jours avec beaucoup de plaisir.

Sur les gros projets, comment gérez-vous l'intégrité des données en BDD concernant les ACL ? Je m'explique : lorsque je supprime un utilisateur, je crois comprendre qu'un événement est généré et je peux ainsi supprimer ses groupes et enfin les droits associés aux groupes.

Mais, si après la suppression d'un utilisateur, le serveur de BDD ne répond plus, je peux me retrouver avec des groupes et des droits orphelins. Cette architecture, avec les événements, rend les choses très modulaires et très propres, c'est super. Mais cela n'est-il pas au détriment de la performance et de l'intégrité des données, dans l'exemple que je mentionne ?

Car comment utiliser une transaction au niveau de la BDD, avec jEvent ? Du coup, cela m'oblige à créer un outil de maintenance qui viendrait faire le ménage dans la BDD pour supprimer les données orphelines ?

Ou alors, peut-être faudrait-il laisser la BDD gérer cela toute seule, en la chargeant de veiller à l'intégrité référentielle ?

Bref, comment faites-vous ? (J'utilise MySQL avec innoDB).

Merci, Aline.

  [Opened] jAuth, jACL et intégrité des données

Reply #1 Posted by foxmask on 06/18/2012 11:44

bonjour, c'est une bonne question ;)

je croyais qu'on avait un parametre dans profiles.ini.php permettant de passer au mode transactionnel comme pour le driver PostGres mais en fait non.

sinon je n'ai pas fait attention si les tables de jacl2 avaient des triggers ou des delete on cascade quand un tel évènement se produisait.

Enfin je pense que l'ultime solution est d'utiliser jDb et la méthode $cnx->beginTransaction() qui se terminerait par un commit() .

  1. émettre dans le premier event de jacl existant un $cnx->beginTransaction()
  2. faire "sa popote" entre les 2 events
  3. émettre dans le dernier event de jacl existant un $cnx->commit()

je vais chercher les events je ne les ai pas en mémoire :)

edit On n'a d'event que sur jAuth. Peut-être qu'en avoir sur jacl2 quand on supprime / ajoute un droit serait interessant

edit2 avec jDao je viens voir qu'on disposait de méthodes

  • daoInsertBefore/After
  • daoUpdateBefore/After
  • daoDeleteBefore/After
  • daoSpecific[methodeHomeMade]Before/After

Donc en surchargeant les DAO de jacl2/jauth on peut s'en sortir !


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] jAuth, jACL et intégrité des données

Reply #2 Posted by laurentj on 06/18/2012 12:29

Bonjour,

Mais, si après la suppression d'un utilisateur, le serveur de BDD ne répond plus, je peux me retrouver avec des groupes et des droits orphelins.

C'est vrai, mais il faut reconnaître que :

  1. modifier des droits utilisateurs dans une appli, ça ne se fait pas toutes les 3 secondes.
  2. les problèmes d’accès à une base de données, ça arrive très rarement en production (ou alors il y a un souci d'architecture et de serveurs).

Bref, il y a très peu de chance que le problème arrive.

Mais la question mérite toutefois d'être posée. Murphy n'est jamais très loin :-) Actuellement, il est vrai, le driver jacl2db ne prend pas en compte cet aspect là.

Si c'est vraiment critique, il y a plusieurs choses possibles à faire. Rien n'empêche déjà d'améliorer le schéma de la base de donnée dans l'application, de manière à autoriser par exemple les suppressions en cascade etc... Il est possible aussi de se faire un autre driver comme celui de jacl2db, mais mettant en oeuvre des transactions etc..

  [Opened] jAuth, jACL et intégrité des données

Reply #3 Posted by Aline on 06/18/2012 14:47

Merci pour vos réponses, Foxmask et LaurentJ. Vous m'apportez les éclaircissements qui m'étaient nécessaires pour prendre en compte (ou non) cette problématique.

 
Page
  1. jAuth, jACL et intégrité des données