Je vais essayer de synthétiser les trois approches évoqués dans la discussion :
- celle actuelle de acces restreint
- la proposition de Pascal (désolé pour le e dans un précédent mail)
- une approche par profils et sans zone
Pour l'exemple, on va considérer une arboresence du type :
- Secteur 1
- Sous-Rubrique du secteur 1
- Secteur 2
- Secteur 3
On va supposer des auteurs A qui doivent avoir accès aux secteurs 1 (mais pas à la sous-rubrique) et 2, des auteurs B qui doivent avoir accès aux secteurs 2 et 3 (le secteur 2 est un secteur commun aux deux groupes) et enfin des auteurs C qui ont les memes droits que les auteurs A mais ont également accès à la sous-rubrique. Bien entendu, un simple visiteur n'a pas accès aux 3 secteurs. Pour le moment, je ne parlerai que de restriction dans l'espace privé.
ACTUELLEMENT
Les zones sont des branches. Une zone est définie par des rubriques d'entrées. Si on a accès à une rubrique d'entrée, on a accès à toutes ses sous-rubriques,indépendemment des autres zones.
Je vais donc créer une zone B' et je cocherai secteur 2 et secteur 3. Je vais associer la zone B' aux auteurs B et ils auront bien accès aux secteurs 2 et 3. Je créé une zone C' où je coche secteur 1 et secteur 2 et je l'associe aux auteurs C. Ils auront bien accès à l'ensemble du contenu de secteur 1 et du secteur 2. Par contre je ne peux pas définir de zone où l'on aurait accès au secteur 1 sans avoir accès à la sous-rubrique. Seule solution, modifier l'arborescence et transformer la sous-rubrique en secteur.
PROPOSITION DE PASCAL
Une zone est toujours une branche ou un ensemble de branches. Toutes les sous-rubriques des rubriques d'entrées appartiennent à la zone. Par contre, pour avoir accès à une rubrique, il faut avoir accès à l'ensemble des zones à laquelle appartient la rubrique.
Pour mettre en place mes restrictions d'accès dans le cas présent, je dois créer 4 zones. Une zone 1' où je coche le secteur 1, une zone 1" où je coche la sous-rubrique du secteur 1, une zone 2' où je coche le secteur 2 et une zone 3' où je coche le secteur 3. Voyez que je n'ai surtout pas coché le secteur 2 dans les zones 1' et 3' car sinon il faudrait avoir accès à la fois à 1' et 3' pour avoir accès au secteur 2 ce qui n'est pas le cas actuellement.
Ensuite je dois donner aux auteurs A l'accès aux zones 1' et 2', aux auteurs B l'accès aux zones 2' et 3' et aux auteurs C l'accès aux zones 1', 1" et 2'.
On obtient donc bien la restriction désirée mais il faut multiplier les zones à associer à chaque auteur. On peut alors éventuellement ajouter une table intermédiaire de profils (mais ca fait une nouvelle table dans la base et une nouvelle étape de configuration). Avec les profils, je vais donc créer un profil A', un profil B' et un profil C', je vais associer les bonnes zones à chaque profil puis associer chaque profil à chaque auteur.
APPROCHE PAR PROFILS (SANS PASSER PAR DES DEFINITIONS DE ZONES)
La troisième approche que je suggère (mais que j'explique peut être mal) est une approche basée uniquement sur des profils. On se contente alors de poser des verrous dans l'arborescence. Pour avoir accès à une rubrique, il faut pouvoir passer chaque rubrique verrouillée depuis la racine du site. D'autre part, s'il y a deux verrous sur une porte, il suffit de pouvoir actionner uniquement l'un deux pour avoir le droit de passer.
J'ai deux possibilités pour avoir le résultats escomptés suivant que je considère ou non les auteurs C comme un sous-groupe des auteurs A.
Première façon de faire :
Je définis un profil A' où je coche secteur 1 et secteur 2 et j'associe ce profil aux auteurs A. Puis un profil B' où je coche secteurs 2 et 3 et je l'associe aux auteurs B, puis un profil C' où je coche secteur 1, secteur 2 et sous-rubrique 1 et je l'associe aux auteurs C.
On obtient bien la restriction désirée. Tous les auteurs A B et C ont accès au secteur 2. Il y a 3 verrous sur ce secteur mais chacun dispose d'au moins une clé. De plus les auteurs A ont bien accès au secteur 1 mais pas à la sous-rubrique car ils ont la clé pour le premier verrou mais pas pour le second.
Seconde façon de faire :
Je considère que les auteurs C sont un sous-groupe des auteurs A. Les profils A' et B' ne changent pas. Pour le profil C', on ne coche que la sous-rubrique. Les auteurs A n'ont toujours pas accès à la sous-rubrique en raison de l'existence d'un verrou. Pour les auteurs C, si on ne leur donne que le profil C', ils n'auront accès à rien, meme pas à la sous-rubrique car pour atteindre la sous-rubrique il faut déjà passer le verrou su secteur 1. par contre, si aux auteurs C je leur associe le profil A' et le profil C', ils auront bien accès à l'ensemble des secteurs 1 et 2 y compris la sous-rubrique.
AU FINAL
Je teste personnellement depuis plusieurs mois l'approche par profil qui est celle de la version modifiée du plugin accès restreint que j'avais proposé et qui est disponible à http://joseph.larmarange.net/Plugin-Acces-Restreint-Modifie.html. Par contre, au moment de cette modification les choses étaient intuitives. Ce plugin doit donc être vu comme une ébauche. De plus, le plugin modifié parle de zones alors qu'il faudrait remplacer partout le mot zone par le mot profil. Si cette approche est retenue, il faudra recoder le tout bien au propre.
Cette approche est ma préférée car il est inutile de créer une nouvelle table et on fait une économie du nombre de profils (seulement 3) tout en proposant des restrictions complexes au besoin.
Par ailleurs, dans la mesure où l'on se contente de poser des verrous, on séparer totalement les verrous que pose un profil dans l'espace public et dans l'espace privé. Ainsi, pour un même profil, on peut avoir des restrictions différentes dans l'espace public et l'espace privé, évitant ainsi d'avoir à doublonner les profils. En distinguant clairement espace public et espace privé, cela permettrait d'envisager d'autres gestios arborescentes de droits par la suite, par exemple, plutôt que d'interdire purement et simplement l'accès à certaines rubriques dans l'espace privé, interdire simplement de publier dans certaines rubriques (un rédacteur pourrait donc voir tous les articles proposés à publication mais ne pourrait proposé d'articles que là où il a le droit le faire, bien sur à discuter mais c'est potentiellement possible). Enfin, cette approche, si la proposition sur les mots clés techniques intègre le core, pourrait être entièrement codée à partir d'un stockage des infos dans les tables de mots clés afin de ne pas créer de tables supplémentaires (mais là c'est un autre sujet futur de conversation).
Par contre, une approche par profils uniquement fait disparaître la notion de zone en tant qu'ensemble de rubriques. Personnellement, dans la mesure où seul accès restreint utilise la notion de zones aujourd'hui, cela ne me gène pas. Et à titre personnel, l'image de verrous que je pose sur des portes est plus explicite pour moi que de parler d'ensembles de rubriques. Bien sur cela reste ouvert à discussion.
Cordialement