Oui, il est très clair dans mon esprit que la gestion des acces restreint doit passer par une gestion intervalaire a moyen terme car c'est bien plus efficace et rapide en terme de code.
Par ailleurs, l'implémentation actuelle d'acces retreint casse sur les gros sites lorsqu'on a beaucoup de rubriques visibles (ou restreintes, c'est selon)
pour cause de dépassement mémoire (la faute à un array qui stocke les id des rubriques en memoire).
Toutefois, cela suppose que les rubriques soient aussi implémentées de façon intervalaire (ce qui accélérerait notablement certains critères comme 'branche').
Les transactions n'étant pas disponibles pour mysql tout venant, je pencherai pour conserver une double implémentation :
- id_parent qui sert à pointer sur le parent, et resterait la référence
- bord_gauche, bord_droit, niveau, qui seraient utilisées par l'implémentation intervalaire.
Passer à ce mode de réprésentation ne casserait aucune compat, et permetrait de bénéficier des gains en perfos au prix de 3 champs supplémentaires (on peut en gagner un à terme en supprimant id_secteur).
Mais cela suppose in fine :
- que l'api gère le double système id_parent + bord_gauche/bord_droite/niveau
- l'id_parent reste la référence car manipulable un une requete sur un enregistrement
- avoir une fonction de reconstruction des bords gauche et droite par parcours de l'arbre
- avoir un critère "d'arbre douteux", qui sera testé dans la fonction 'propager_les_secteurs', qui peut reposer simplement sur quelques conditions simples testables en une requete unique :
- max(bord_droite) = 2xN (le nombre de rubriques)
- bord_droite>bord_gauche pour toutes les rubriques
- somme(bord_gauche)+somme(bord_droite) = N.(N+1)/2
- somme(bord_gauche^2)+somme(bord_droite^2) = (2.N + 1).(N+1) . N/6
si une incohérence est detectée, lancer la reconstruction des bords de chaque noeud, par parcourt de l'arbre
Avec une telle implémentation, il me semble que l'on couvre tous les besoins, sans casser la compat (raison pour laquelle je serais d'avis de maintenir le champ id_secteur dans un premier temps, en l'annonçant obsolete, le critère pouvant lui être remplacé par une condition sur les bords)
Cédric