[SPIP Zone] Développement du plugin Accès restreint

Pascal Lamblin a écrit :

Bonjour,

J'utilise le plugin Accès restreint sur un site que je développe, et
il y a deux fonctions que j'aimerais bien voir exister :
- pouvoir imposer des restrictions d'accès supplémentaires à une
sous-branche d'une zone retreinte, j'en ai déjà parlé en [1] et [2] ;
- limiter également l'accès aux documents d'une rubrique restreinte,
et d'un article dans une rubrique restreinte [3].

Je suis prêt à commencer l'implémentation de ces fonctionnalités dans
le plugin, même si je n'ai encore jamais fouillé dans les entrailles
de SPIP ni programmé vraiment en PHP+SQL.

Par contre, je ne le ferai que si ça peut être utile à quelqu'un
d'autre que moi, en particulier si vous pensez que c'est intéressant
d'avoir ça à court terme ou que ça pourra s'intégrer dans la version 2
du plugin. Je peux aussi attendre le développement officiel de la V2
et y participer.

Si vous pensez que ça vaut le coup, voilà ce que je propose de faire :

- Si un article ou une rubrique est restreint, restreindre l'accès à
tous les documents qui lui sont attachés. Pour l'accès aux images,
j'hésite encore, puisque de toute façon il peut y avoir des vignettes
qui ne sont pas facilement protégeables. On peut utiliser l'idée de
proxy d'image en PHP de la contrib « Protéger le répertoire IMG/ »
[4], qui ferait les requêtes appropriées à la base de données pour
s'assurer des droits. Peut-être rajouter une case à cocher dans
l'interface du plugin pour activer ce comportement ou non.

Vas-y c'est en effet un manque du plugin. Pour la manière de faire, cf. le mail de Cédric.

- Ensuite, implémenter la version simple d'héritage des droits dont
je parlais, qui fait qu'une rubrique fait automatiquement partie de la
zone de ses ancêtres, et que si une rubrique fait partie de plusieurs
zones, alors pour y avoir accès il faut avoir accès à chacune de ces
zones.

Ta proposition permet en effet de maintenir une définition stricte des zones (qui restent une branche ou un ensemble de branches) et de permettre des restrictions plus subtiles (accès à une branche mais pas à une sous-branche). Par contre, cela implique de bien séparer les zones (d'où une multiplication des zones sur un site complexe).

Vas-y committe. Il faudra seulement que se développe dans la foulée les groupes d'auteurs afin de ne pas avoir à multiplier le nombre de zones à associer à chaque auteur.

Quelques questions maintenant :
- Est-ce que vous pensez que ça se tient ?
- Est-ce que ça vous intéresse ?
- Est-ce que vous seriez disponible pour répondre à des questions
sur les choix de design passés du plugin, ou sur de bêtes points de
techniques si je bloque ?
- Est-ce qu'il y a d'autres personnes avec qui je devrais communiquer ?

En cas de question, n'hésite pas à poster sur la liste spip-zone.

Merci d'avance de vos réponses,

[1] Le plugin Accès Restreint - SPIP-Contrib
[2] Éléments de réflexion sur la définition des zones pour accès restreint - Joseph Larmarange
[3] Accès restreint V2 - Les objectifs - SPIP-Contrib
[4] Protéger le répertoire IMG/ - SPIP-Contrib

Re-bonjour,

On 6/23/07, Joseph <joseph@larmarange.net> wrote:

Ta proposition permet en effet de maintenir une définition stricte des
zones (qui restent une branche ou un ensemble de branches) et de
permettre des restrictions plus subtiles (accès à une branche mais pas à
une sous-branche). Par contre, cela implique de bien séparer les zones
(d'où une multiplication des zones sur un site complexe).

Vas-y committe.

Euh, je vais commencer par lire les archives des discussions, demander
un login sur le SVN, coder ça, et puis après je committerai :slight_smile:

Il faudra seulement que se développe dans la foulée les
groupes d'auteurs afin de ne pas avoir à multiplier le nombre de zones à
associer à chaque auteur.

Bonne idée, les groupes d'auteurs, j'aime bien le principe.

En cas de question, n'hésite pas à poster sur la liste spip-zone.

Voilà, c'est fait :slight_smile:
--
Pascal

> Il faudra seulement que se développe dans la foulée les
> groupes d'auteurs afin de ne pas avoir à multiplier le nombre de zones à
> associer à chaque auteur.

Bonne idée, les groupes d'auteurs, j'aime bien le principe.

Moi j'aime pas trop : je préfère les "profils", qui sont plus
génériques (on peut avoir un certain profil du lundi au vendredi, et
un autre le week-end, ou le profil peut dépendre du numéro IP qu'on a,
etc).

-- Fil

On 6/23/07, Fil <fil@rezo.net> wrote:

Moi j'aime pas trop : je préfère les "profils", qui sont plus
génériques (on peut avoir un certain profil du lundi au vendredi, et
un autre le week-end, ou le profil peut dépendre du numéro IP qu'on a,
etc).

Oui, en effet, vous en aviez déjà parlé (et je n'avais pas lu les
archives avant de répondre).

Enfin tant qu'il est simple de créer un profil qui correspond à un
groupe d'utilisateurs...

--
Pascal

> Moi j'aime pas trop : je préfère les "profils", qui sont plus
> génériques (on peut avoir un certain profil du lundi au vendredi, et
> un autre le week-end, ou le profil peut dépendre du numéro IP qu'on a,
> etc).

Oui, en effet, vous en aviez déjà parlé (et je n'avais pas lu les
archives avant de répondre).

Enfin tant qu'il est simple de créer un profil qui correspond à un
groupe d'utilisateurs...

C'est effectivement un des profils les plus simples à poser, avec
celui de statut d'auteur :slight_smile:

Mais en termes de programmation ça signifie qu'on n'aura pas de
jointures partout avec les tables spip_groupes_auteurs ^ spip_auteurs

-- Fil

Fil a écrit :

Il faudra seulement que se développe dans la foulée les
groupes d'auteurs afin de ne pas avoir à multiplier le nombre de zones à
associer à chaque auteur.

Bonne idée, les groupes d'auteurs, j'aime bien le principe.

Moi j'aime pas trop : je préfère les "profils", qui sont plus
génériques (on peut avoir un certain profil du lundi au vendredi, et
un autre le week-end, ou le profil peut dépendre du numéro IP qu'on a,
etc).

-- Fil

Pour mémoire, je distingue les termes profils et groupes en appelant groupe un ensemble d'auteurs et profil un ensemble de droits.
Cf. Accès restreint V2 - Les objectifs - SPIP-Contrib

En y réfléchissant un peu, ce que propose pascale, est de considérer qu'une zone est une branche ou un ensemble de branches et que pour avoir accès à une rubrique il faut avoir accès à toutes les zones à laquelle elle appartient.

A l'usage, la majorité des zones correspondront à une branche (moins souvent à deux branches). Par contre, sur des sites complexes (comme je le teste actuellement avec un intranet possédant de nombreux groupes et sous-groupes), il va falloir créer de nombreuses zones puis associer à chaque auteur concernés toutes les zones auxquelles il appartient. Ce qui devient vite assez lourd.
Il faudra donc vite pour ce type de site avoir d'un coté la définition de toutes les zones et de l'autre regrouper des autorisations dans des profils pour ne pas avoir à associer une multitude zones à chaque auteur. Sur l'intranet sur lequel je travaille actuellement, pour les administrateurs de groupes s'en sorte, il importe qu'il n'y ait, pour un ensemble de droits liés à l'appartenance à un groupe, un seul élément à associer à l'auteur.

Sur cet intranet, j'utilise actuellement la version modifiée de accès restreint que j'avais proposé il y a quelques mois (cf. Plugin Accès Restreint Modifié - Joseph Larmarange). Même si je ne l'avais pas présenté ainsi à l'époque, son mode de fonctionnement repose sur des profils et non des zones (même si les fichiers de langue de cette version modifiée n'ont pas été traduits). Les zones sont réduites à leur forme la plus simple : une zone est une branche et une seule de rubriques, et une zone filtre soit l'espace privé, soit l'espace public. Sous cette forme très simple, une zone est définie par deux renseignements : un id_rubrique et public ou prive. Vu ainsi, les zones sont définies directement lors de la création des profils. Présenté autrement, cette version modifiée du plugin se contente d'aller poser des verrous dans l'espace privé et dans l'espace public.

Pourquoi j'utilise pour l'intranet dont je parlais cette version modifiée ? Sur cet intranet, chaque groupe dispose de son secteur mais les groupes sont aussi structurés enfin en sous groupes. De plus, il existe des espaces communs à plusieurs groupes. Les restrictions de l'espace privé sont au final assez compliqué. Dans l'espace public c'est plutot simple. En effet, tout le monde (du moins les membres) est censé voir le contenu publié en ligne. Par contre, en raison de sujets sensibles traités, chaque groupe et sous-groupe souhaite pouvoir rédiger collectivement sans que les autres membres puissent voir leur travailler tant que ce dernier n'est pas terminé. De plus, la restriction de l'espace privé permet aux rédacteurs de ne voir que les rubriques où iils peuvent publiés (pour info, tous les rédacteurs, meme s'ils ne sont pas auteurs ont le droit de modifier un article).
Les groupes et les sous-groupes sont gérés par des admins restreints. Lorqu'un rédacteur rejoint un sous-groupe, il doit avoir accès d'une part à la branche de son sous-groupe, à la partie commune du groupe à laquelle il appartient et aux parties communes inter-groupes. D'où tout un ensemble de droits en différents points du site. En utilisant la version modifié du plugin, tous ces droits peuvent être définis en un seul profil. Du coup, pour l'admin restreint qui veut rajouter un rédacteur à un groupe, il a un seul profil à associer à l'auteur plutit une multitudes de zones que l'on aurait dans une approche zonale.
En ayant réduit les zones à leur forme la plus simple : une branche soit publique soit privée, elles sont définies directement à la création du profil et du coup il est inutile de passer par une étape supplémentaire de création préalable des zones.

Voilà donc pourquoi je suis à titre personnel partisan d'une approche par profils en réduisant la notion de zone à celle de branche privée ou branche publique. De plus, cette approche consiste, présentée autrement, uniquement à poser des "verrous" aux bons endroits.

Jo

En y réfléchissant un peu, ce que propose pascale, est de considérer
qu'une zone est une branche ou un ensemble de branches et que pour avoir
accès à une rubrique il faut avoir accès à toutes les zones à laquelle
elle appartient.

Ne faudrait-il pas plutôt avoir accès à une rubrique restreinte à partir du moment ou l'on appartient au moins à l'une des zones qui la contiennent ?

C'est à dire avoir au moins un profil (vous avez prévu le multi profil pour un compte unique ?) dont les droits permettent l'accès à cette rubrique.

Sinon, il va falloir finir par avoir une zone par rubrique, et autant de profils...

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002

On 6/25/07, Nicolas Hoizey <nicolas@hoizey.com> wrote:

> En y réfléchissant un peu, ce que propose pascale, est de considérer
> qu'une zone est une branche ou un ensemble de branches et que pour
> avoir
> accès à une rubrique il faut avoir accès à toutes les zones à laquelle
> elle appartient.

C'est bien ça que je dis (sauf qu'il n'y a pas de « e » dans mon prénom).

Ne faudrait-il pas plutôt avoir accès à une rubrique restreinte à
partir du moment ou l'on appartient au moins à l'une des zones qui la
contiennent ?

Non, parce que cela empêcherait de définir des restrictions
supplémentaires pour une sous-rubrique d'une rubrique déjà protégée.
Je veux pouvoir avoir un coffre-fort dans mon bureau, sans que tous
ceux qui aient la clé de mon bureau puissent l'ouvrir.

C'est à dire avoir au moins un profil (vous avez prévu le multi
profil pour un compte unique ?) dont les droits permettent l'accès à
cette rubrique.

Je dirais plutôt : pour chacune des zones auxquelles appartient la
rubrique, il faut avoir au moins un profil qui permette d'accéder à la
zone.

Autrement dit, pour chacune des portes qui sont sur mon chemin, je
dois avoir le droit de posséder la clé.

Sinon, il va falloir finir par avoir une zone par rubrique, et autant
de profils...

Non, justement : tu peux cumuler les restrictions en imbriquant les
zones protégées les unes dans les autres, et cumuler les autorisations
en associant plusieurs profils au même utilisateur.

--
Pascal

Ne faudrait-il pas plutôt avoir accès à une rubrique restreinte à
partir du moment ou l'on appartient au moins à l'une des zones qui la
contiennent ?

Non, parce que cela empêcherait de définir des restrictions
supplémentaires pour une sous-rubrique d'une rubrique déjà protégée.
Je veux pouvoir avoir un coffre-fort dans mon bureau, sans que tous
ceux qui aient la clé de mon bureau puissent l'ouvrir.

Effectivement.

C'est à dire avoir au moins un profil (vous avez prévu le multi
profil pour un compte unique ?) dont les droits permettent l'accès à
cette rubrique.

Je dirais plutôt : pour chacune des zones auxquelles appartient la
rubrique, il faut avoir au moins un profil qui permette d'accéder à la
zone.

Oui, parfait, je n'avais pas pensé à la définition de plusieurs zones sur une même rubrique, mais ce sera vite le cas avec des zones sur des branches plutôt que des rubriques uniques.

Autrement dit, pour chacune des portes qui sont sur mon chemin, je
dois avoir le droit de posséder la clé.

Sinon, il va falloir finir par avoir une zone par rubrique, et autant
de profils...

Non, justement : tu peux cumuler les restrictions en imbriquant les
zones protégées les unes dans les autres, et cumuler les autorisations
en associant plusieurs profils au même utilisateur.

Je vois mieux maintenant le modèle complet, c'est parfait.

Du coup, ne serait-il pas pertinent de passer à un modèle « nested set » en base pour mieux gérer l'arborescence de rubriques et les zones plus simplement ?

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002

On 6/25/07, Nicolas Hoizey <nicolas@hoizey.com> wrote:

Je vois mieux maintenant le modèle complet, c'est parfait.

Cool :slight_smile:

Du coup, ne serait-il pas pertinent de passer à un modèle « nested
set » en base pour mieux gérer l'arborescence de rubriques et les
zones plus simplement ?

Alors là, ça dépasse largement mes compétences.
Tu parles d'un redesign de toute la base SPIP ?

--
Pascal

Du coup, ne serait-il pas pertinent de passer à un modèle « nested
set » en base pour mieux gérer l'arborescence de rubriques et les
zones plus simplement ?

Alors là, ça dépasse largement mes compétences.
Tu parles d'un redesign de toute la base SPIP ?

Pas de toute la base, non, juste deux colonnes en plus dans spip_rubriques pour optimiser le traitement en lecture des arborescences, et plus particulièrement des branches.

-Nicolas

--
Nicolas "Brush" HOIZEY
Clever Age : http://www.clever-age.com/
Gastero Prod : http://www.gasteroprod.com/
Photos : http://www.flickr.com/gp/38608514@N00/M1c002

Nicolas Hoizey a écrit :

En y réfléchissant un peu, ce que propose pascale, est de considérer
qu'une zone est une branche ou un ensemble de branches et que pour avoir
accès à une rubrique il faut avoir accès à toutes les zones à laquelle
elle appartient.

Ne faudrait-il pas plutôt avoir accès à une rubrique restreinte à partir du moment ou l'on appartient au moins à l'une des zones qui la contiennent ?

C'est à dire avoir au moins un profil (vous avez prévu le multi profil pour un compte unique ?) dont les droits permettent l'accès à cette rubrique.

Sinon, il va falloir finir par avoir une zone par rubrique, et autant de profils...

-Nicolas

C'est ce que je soulignais.

jo

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

Bonjour,

Et d'abord merci de ta synthèse. Voilà mes réactions...

On 6/25/07, Joseph <joseph@larmarange.net> wrote:

ACTUELLEMENT
[...]
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.

Je pense que c'est suffisant pour dire qu'on ne veut pas garder cette solution.

PROPOSITION DE PASCAL
[...]

C'est bien ça que je proposais.

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.

Si j'ai bien compris, ça veut dire « une zone == une arborescence »,
donc pas besoin de table zones_rubriques.

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.

C'est le point qui me semble contre-intuitif. Moins il y a de verrous,
moins il y a de monde qui peut passer, sauf s'il n'y a pas de verrou
du tout et dans ce cas-là tout le monde passe.

Ou encore, supposons un secteur 1 avec une sous-rubrique 11 qui a
elle-même une sous-rubrique 111, et un verrou correspondant au profil
A sur le secteur 1. Si je mets un verrou du profil C sur 111, alors
111 sera réservée à l'intersection des profils A et C. De même, si je
mets ce verrou sur 11, alors 11 et 111 seront réservées à
l'intersection des deux profils. Mais si je fais remonter ce verrou
d'encore un niveau, alors tout le secteur sera ouvert à l'union des
profils A et C.

Comme je ne peux pas m'empêcher de réfléchir, je vous propose une...

PROPOSITION 2 DE PASCAL

Comme dans l'approche par profil, on oublie la notion de zone. On pose
aussi des verrous dans l'arborescence, et pour accéder à une rubrique,
il faut avoir la clé de tous les verrous sur le chemin depuis la
racine.

Par contre, si une porte a plusieurs verrous, il faut avoir toutes les
clés pour passer. Pour cela, on définit des profils plus large au
besoin.

Dans l'exemple donné, on commence par créer trois profils A', B' et C'
qui correspondent à nos trois groupes de personnes, ainsi qu'un profil
AC qui rassemble A' et C', et un ABC qui les rassemble tous les trois.

On place ensuite un verrou de AC sur 1, un de C' sur la sous-rubrique
de 1, un de ABC sur 2 et un de B sur 3.

Ça nous fait 5 profils, dont deux qui sont rapides à faire, et 4 verrous.

Je ne suis pas encore certain de préferer cette solution, mais je
voulais vous la soumettre.

Voilà voilà,
--
Pascal

Pascal Lamblin a écrit :

Bonjour,

Et d'abord merci de ta synthèse. Voilà mes réactions...

On 6/25/07, Joseph <joseph-x+8GNkP+qxjBR+Zhj3ejFg@public.gmane.org> wrote:

ACTUELLEMENT
[...]
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.

Je pense que c'est suffisant pour dire qu'on ne veut pas garder cette solution.

PROPOSITION DE PASCAL
[...]

C'est bien ça que je proposais.

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.

Si j'ai bien compris, ça veut dire « une zone == une arborescence »,
donc pas besoin de table zones_rubriques.

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.

C'est le point qui me semble contre-intuitif. Moins il y a de verrous,
moins il y a de monde qui peut passer, sauf s'il n'y a pas de verrou
du tout et dans ce cas-là tout le monde passe.

Je vais te proposer une autre image voir plus bas

Ou encore, supposons un secteur 1 avec une sous-rubrique 11 qui a
elle-même une sous-rubrique 111, et un verrou correspondant au profil
A sur le secteur 1. Si je mets un verrou du profil C sur 111, alors
111 sera réservée à l'intersection des profils A et C. De même, si je
mets ce verrou sur 11, alors 11 et 111 seront réservées à
l'intersection des deux profils. Mais si je fais remonter ce verrou
d'encore un niveau, alors tout le secteur sera ouvert à l'union des
profils A et C.

Comme je ne peux pas m'empêcher de réfléchir, je vous propose une...

PROPOSITION 2 DE PASCAL

Comme dans l'approche par profil, on oublie la notion de zone. On pose
aussi des verrous dans l'arborescence, et pour accéder à une rubrique,
il faut avoir la clé de tous les verrous sur le chemin depuis la
racine.

Par contre, si une porte a plusieurs verrous, il faut avoir toutes les
clés pour passer. Pour cela, on définit des profils plus large au
besoin.

Dans l'exemple donné, on commence par créer trois profils A', B' et C'
qui correspondent à nos trois groupes de personnes, ainsi qu'un profil
AC qui rassemble A' et C', et un ABC qui les rassemble tous les trois.

On place ensuite un verrou de AC sur 1, un de C' sur la sous-rubrique
de 1, un de ABC sur 2 et un de B sur 3.

Plutot que de parler de verrou AC, je parelerai de lecteur de cartes qui laisse passer les cartes A et C (cf. plus bas).

Ça nous fait 5 profils, dont deux qui sont rapides à faire, et 4 verrous.

Euhh à te lire, ca fait 3 profils et 4 verrous

Je ne suis pas encore certain de préferer cette solution, mais je
voulais vous la soumettre.

Voilà voilà,

Je propose une autre image peut-être plus intuitive pour l'approche par profils. Au lieu de poser des verrous, je pose des lecteurs de cartes à puce.
Toute rubrique qui est cochée au moins une fois dans un profil dispose donc d'un lecteur de cartes.
Quand je coche une rubrique dans un profil, cela vérifie qu'il y a un lecteur de cartes sur la rurbique et s'il n'y en a pas, alors en rajoute un. Par ailleurs, ça inscrit sur la carte à puce du profil 'ouvre telle porte'. Ainsi, sur la porte du secteur 2, il y a un seul lecteur de cartes. Par contre, les cartes à Puce de A' et de B' ont toutes les deux le droit d'ouvrir cette porte. Si un auteur est associé à plusieurs profils, alors il possède plusieurs cartes à puce et peut utiliser la carte adéquat aux différents endroits.

Par ailleurs, afin de faciliter la gestion des différents profils et s'y retrouver, je proposerai que sur la page des gestion d'un profil, on voir l'arborescence du site pour l'espace public et l'arborescence du site pour l'espace privé. On surlignerait en couleur les rubriques que la carte à puce du profil ouvre et en gris les rubriques possédant un lecteur de cartes mais que n'ouvre pas la carte à puce du profil considéré.
De plus, sur la page de gestion des profils, sous la liste des profils, présenter une synthèse des restrictions de l'espace public et des restrictions de l'espace privé en surlignant en couleur toutes les rubriques ayant une restriction d'accès et en mettant à côté du nom de ces rubriques le nom de tous les profils qui ont le droit de passer cette rubrique. Ainsi, il est possible de voir rapidement l'ensemble des restrictions d'accès.

Joseph

Pascal Lamblin a écrit :

Bonjour,

Et d'abord merci de ta synthèse. Voilà mes réactions...

On 6/25/07, Joseph <joseph-x+8GNkP+qxjBR+Zhj3ejFg@public.gmane.org> wrote:

ACTUELLEMENT
[...]
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.

Je pense que c'est suffisant pour dire qu'on ne veut pas garder cette solution.

PROPOSITION DE PASCAL
[...]

C'est bien ça que je proposais.

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.

Si j'ai bien compris, ça veut dire « une zone == une arborescence »,
donc pas besoin de table zones_rubriques.

La notion de zone (zone étant définie comme un ensemble de rubriques dont la définition est autonome et ne dépend pas des autres zones cf. l'historique des discussions sur acces restreint) disparait. Par contre, il faut néanmoins définir là où l'on pose des lecteurs de cartes et les droits des différents profils. Donc il faut toujours trois tables : profils, profils_auteurs et profils_rubriques (NB ces tables pourraient disparaitre au profit d'une utilisation de mots clés techniques mais tant que ces derniers ne sont pas intégrés au core il est prématuré d'en parler).

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.

C'est le point qui me semble contre-intuitif. Moins il y a de verrous,
moins il y a de monde qui peut passer, sauf s'il n'y a pas de verrou
du tout et dans ce cas-là tout le monde passe.

Ou encore, supposons un secteur 1 avec une sous-rubrique 11 qui a
elle-même une sous-rubrique 111, et un verrou correspondant au profil
A sur le secteur 1. Si je mets un verrou du profil C sur 111, alors
111 sera réservée à l'intersection des profils A et C. De même, si je
mets ce verrou sur 11, alors 11 et 111 seront réservées à
l'intersection des deux profils. Mais si je fais remonter ce verrou
d'encore un niveau, alors tout le secteur sera ouvert à l'union des
profils A et C.

Si tu coches secteur 1 pour le profil A et le profil C, alors ces deux profils ont accès au secteur 1 sans avoir besoin d'avoir les deux (comme c'est le cas pour le secteur 2 avec les profils A et B).
Si, et seulement si, tu coches secteur 1 que pour A et une sous-rubrique pour C (sans cocher secteur 1 pour C) alors la sous-rubrique nécessitera l'union des deux profils.
Mais de toute façon, quelque soit l'approche retenue, des restrictions d'accès n'ont de sens que les unes par rapport aux autres. Faire deux profils qui ont les mêmes droits (à moins qu'un jour les profils servent aussi à gérer d'autres choses), n'a guère de sens. Sauf si deux profils ont les mêmes droits sur l'espace public mais pas les mêmes droits sur l'espace privé (ce qui m'arrive notamment sur un intranet sur lequel je bosse en ce moment)

Comme je ne peux pas m'empêcher de réfléchir, je vous propose une...

PROPOSITION 2 DE PASCAL

Comme dans l'approche par profil, on oublie la notion de zone. On pose
aussi des verrous dans l'arborescence, et pour accéder à une rubrique,
il faut avoir la clé de tous les verrous sur le chemin depuis la
racine.

Par contre, si une porte a plusieurs verrous, il faut avoir toutes les
clés pour passer. Pour cela, on définit des profils plus large au
besoin.

Dans l'exemple donné, on commence par créer trois profils A', B' et C'
qui correspondent à nos trois groupes de personnes, ainsi qu'un profil
AC qui rassemble A' et C', et un ABC qui les rassemble tous les trois.

On place ensuite un verrou de AC sur 1, un de C' sur la sous-rubrique
de 1, un de ABC sur 2 et un de B sur 3.

Ça nous fait 5 profils, dont deux qui sont rapides à faire, et 4 verrous.

Je ne suis pas encore certain de préferer cette solution, mais je
voulais vous la soumettre.

Voilà voilà,

On 6/25/07, Joseph <joseph@larmarange.net> wrote:

> PROPOSITION 2 DE PASCAL
> [...]

Euhh à te lire, ca fait 3 profils et 4 verrous

Non, 5 profils : A', B', C', ABC et AC.

Je propose une autre image peut-être plus intuitive pour l'approche par
profils. Au lieu de poser des verrous, je pose des lecteurs de cartes à
puce.

Que ce soit des cartes à puces ou des serrures perfectionnées, je
comprends bien ce que tu proposes, mais il y a toujours ce truc qui me
gêne : la première fois qu'on coche une rubrique donnée sur un profil,
on restreint l'accès (avant, tout le monde pouvait passer), mais la
deuxième fois et les suivantes on l'élargit.

Pour prendre le problème dans l'autre sens, si on décoche une rubrique
sur un profil, on enlève l'accès à cette rubrique aux membres du
profil, sauf si c'est le seul profil à avoir coché cette rubrique, et
dans ce cas-là tout le monde y a accès.

Pour moi, dans le cadre où un lecteur laisse passer n'importe laquelle
des cartes parmi un certain ensemble, il ne devrait laisser passer
personne si cet ensemble est vide. Or, on voudrait qu'il laisse passer
tout le monde...

--
Pascal

On 6/25/07, Joseph <joseph@larmarange.net> wrote:

> Ou encore, supposons un secteur 1 avec une sous-rubrique 11 qui a
> elle-même une sous-rubrique 111, et un verrou correspondant au profil
> A sur le secteur 1. Si je mets un verrou du profil C sur 111, alors
> 111 sera réservée à l'intersection des profils A et C. De même, si je
> mets ce verrou sur 11, alors 11 et 111 seront réservées à
> l'intersection des deux profils. Mais si je fais remonter ce verrou
> d'encore un niveau, alors tout le secteur sera ouvert à l'union des
> profils A et C.

Si tu coches secteur 1 pour le profil A et le profil C, alors ces deux
profils ont accès au secteur 1 sans avoir besoin d'avoir les deux (comme
c'est le cas pour le secteur 2 avec les profils A et B).
Si, et seulement si, tu coches secteur 1 que pour A et une sous-rubrique
pour C (sans cocher secteur 1 pour C) alors la sous-rubrique nécessitera
l'union des deux profils.

OK, je n'ai pas été clair dans mon utilisation d'« union » et d'«
intersection », je reformule.

Si je pose seulement deux verrous, l'un du profil A sur le secteur 1,
et l'autre du profil C à un endroit variable :
  -* si le verrou de C est sur la rubrique 11 ou 111, il faut être à
la fois dans A et dans C pour voir 111 (être dans l'intersection des
ensembles A et C);
  -* si le verrou de C est sur le secteur 1, il suffit d'être dans A
ou bien dans C pour voir 111 (être dans l'union des ensembles A et C).

J'espère que c'est plus clair,
--
Pascal

Pascal Lamblin a écrit :

On 6/25/07, Joseph <joseph-x+8GNkP+qxjBR+Zhj3ejFg@public.gmane.org> wrote:

PROPOSITION 2 DE PASCAL
[...]

Euhh à te lire, ca fait 3 profils et 4 verrous

Non, 5 profils : A', B', C', ABC et AC.

Je propose une autre image peut-être plus intuitive pour l'approche par
profils. Au lieu de poser des verrous, je pose des lecteurs de cartes à
puce.

Que ce soit des cartes à puces ou des serrures perfectionnées, je
comprends bien ce que tu proposes, mais il y a toujours ce truc qui me
gêne : la première fois qu'on coche une rubrique donnée sur un profil,
on restreint l'accès (avant, tout le monde pouvait passer), mais la
deuxième fois et les suivantes on l'élargit.

Pour prendre le problème dans l'autre sens, si on décoche une rubrique
sur un profil, on enlève l'accès à cette rubrique aux membres du
profil, sauf si c'est le seul profil à avoir coché cette rubrique, et
dans ce cas-là tout le monde y a accès.

Pour moi, dans le cadre où un lecteur laisse passer n'importe laquelle
des cartes parmi un certain ensemble, il ne devrait laisser passer
personne si cet ensemble est vide. Or, on voudrait qu'il laisse passer
tout le monde...

C'est là où il y a une différence entre les zones et les profils. Le but des profils c'est de réunir dans un même profil l'ensemble des droits d'un même groupe d'utilisateurs. Donc de pouvoir dire aux profils A, voilà tout ce qu'ils ont le droit de voir.

En faisant A, B, C, ABC et AC, on est dans une logique de zones. Tu sépares clairement des zones bien distinctes, et ensuite tu accordes à chaque auteur plusieurs droits.

Ce sont deux manières différentes de concevoir la problématique. Si on réfléchit en termes de zones, alors il vaut mieux avoir plus de zones clairement distinctes.

Si on réfléchit en termes de profils, il faut pouvoir définir l'ensemble des droits d'un individu dans un même profil.

Pour reprendre l'image de l'immeuble. Si on réfléchit en terme de zones, alors on pose des verrous aux différentes portes, puis on donne à chacun un double de chacune des clés en fonction de ses droits. Il aura donc plusieurs clés.
Un raisonnement par profils, c'est ce qu'on retrouve dans les établissements modernes on ne donne à un individu qu'une carte à puces cette carte unique lui permettant d'ouvrir toutes les portes qu'il a besoin d'ouvrir.

On arrive au même résultat dans les deux cas mais il me semble que sur un gros site une approche par profils est plus facile à maintenir. On ne change pas l'arborsence et les auteurs au même rythme. En règle général, l'arborescence principal des grandes rubriques sur lesquelles ont définit les restrictiosn d'accès changent assez peu. Par contre, des individus viennent rejoindre ou quitter dans le temps des groupes de travail. Lorsqu'il y a un nouvel auteur qui rejoint un groupe, il est plus facile de n'avoir à lui attribuer un seul profil, plutôt que de se souvenir de la liste complète des zones auxquelles il a accès quand il intègre ce groupe de travail. Il y a un risque d'en oublier une partie par exemple.
Seuls les admins généraux peuvent modifier les profils ou les zones selon l'approche retenue, mais un admin restreint pour accorder ou retirer l'accès à un auteur des zones ou profils auxquels lui-même appartient. Pour un admin restreint qui gère un groupe de travail, il est beaucoup plus simple qu'il n'ait qu'un seul profil à associer à un nouvel auteur plutôt que plusieurs.

En règle général, en particulier sur un site collaboratif, tu auras toujours un nombre moindre de rubriques verrouyés que d'auteurs à qui il faut accorder des droits. Il est donc préférable de limiter le nombre de zones/profils à associer aux auteurs car sinon bonjour le nombre d'heures passer à reprendre la liste des auteurs un par un pour leur associer les bons accès. Encore une fois, dans une approche par profils, on limite ce nombre.

Dernier exemple enfin. Supposons que nous avons sur un site en cours de fonctionnement, le groupe A qui a accès au secteur 1 et le groupe B qui a accès au secteur 2. Tu as une centaines de rédacteurs dans chaque groupe.
Au fur et à mesure, il est apparu que ces deux groupes avaient besoin d'un espace commun de rédaction collaborative mais que pour autant il devait chacun garder leur espace propre.
On décide donc de créer un secteur 3 qui sera un secteur commun aux groupes A et B.

Dans ton approche approche par zones, il faut créer une nouvelle zone AB, puis associer à chacun des 200 rédacteurs de A et de B la zone AB.
Dans une approche par profil, tu rajoutes le secteur 3 dans les rubriques accessibles de A et tu fais de même pour B. On a simplement changer les droits de ces deux profils. C'est tout.
A l'usage, je te laisse deviner laquelle de ces deux approches est la plus facile à maintenir et prends le moins de temps.

Joseph

Pascal Lamblin a écrit :

On 6/25/07, Joseph <joseph-x+8GNkP+qxjBR+Zhj3ejFg@public.gmane.org> wrote:

Ou encore, supposons un secteur 1 avec une sous-rubrique 11 qui a
elle-même une sous-rubrique 111, et un verrou correspondant au profil
A sur le secteur 1. Si je mets un verrou du profil C sur 111, alors
111 sera réservée à l'intersection des profils A et C. De même, si je
mets ce verrou sur 11, alors 11 et 111 seront réservées à
l'intersection des deux profils. Mais si je fais remonter ce verrou
d'encore un niveau, alors tout le secteur sera ouvert à l'union des
profils A et C.

Si tu coches secteur 1 pour le profil A et le profil C, alors ces deux
profils ont accès au secteur 1 sans avoir besoin d'avoir les deux (comme
c'est le cas pour le secteur 2 avec les profils A et B).
Si, et seulement si, tu coches secteur 1 que pour A et une sous-rubrique
pour C (sans cocher secteur 1 pour C) alors la sous-rubrique nécessitera
l'union des deux profils.

OK, je n'ai pas été clair dans mon utilisation d'« union » et d'«
intersection », je reformule.

Si je pose seulement deux verrous, l'un du profil A sur le secteur 1,
et l'autre du profil C à un endroit variable :
  -* si le verrou de C est sur la rubrique 11 ou 111, il faut être à
la fois dans A et dans C pour voir 111 (être dans l'intersection des
ensembles A et C);

Je suis d'accord.

  -* si le verrou de C est sur le secteur 1, il suffit d'être dans A
ou bien dans C pour voir 111 (être dans l'union des ensembles A et C).

Je suis également d'accord.

J'espère que c'est plus clair,

C'est bien ce qui est proposé dans l'approche par profils.

Et si j'ai bien compris, dans l'approche que tu proposes, ce qui diffère c'est le cas ou le verrou de C porte sur le secteur 1. Toi tu préconises qu'il faut avoir A ET C pour y avoir accès. C'est bien ça ?

Joseph