MarcWiki

Le wiki de Marc Meurrens
connexion :
Help > Home > Tech > Casiwi >
(no edit access)

Acls

Resp. Inconnu Mise à jour 25 Mai 2009 à 20h24 par

ACL


Un acronyme pour Acces Control Level.

Les ACLs sont définies, pratiquement, dans plusieurs fichiers de configuration, de manières qui peuvent paraître contradictoires : cette contradiction n'est qu'apparente, les nouvelles valeurs remplaçant les anciennes; nouvelles signifiant particulière par rapport à général, ou propre à une installation par rapport à par défaut, ou encore action qualifiée (à comprendre plus bas) par rapport à action générale.

Les personnes concernées


On distingue, par ordre décroissant d'importance :

  • l'administrateur ou root, noté dans les définitions par le caractère ! (point d'exclamation); dans cette version du logiciel, il n'existe qu'un seul administrateur; mais, voir ci-dessous, on peut aussi créer des droits particuliers pour des utilisateurs particuliers
  • un utilisateur particulier untel, ce qui sera noté par untel; bien entendu, cet utilisateur aura du se connecter (fournir son password); voir l'exemple plus bas.
  • tout utilisateur connecté (donc qui a fourni son password), noté par + (plus); attention : si un visiteur quelconque a le droit de s'inscrire lui-même, celà signifie que tout le monde peut virtuellement accéder au droits de l'utilisateur connecté (ce n'est pas du tout un non sens : on peut choisir de ne laisser faire des modifications qu'à ceux qui ont, plus ou moins, annoncé leur identité).
  • tout visiteur (donc, le monde entier), noté par * (astérisque)

groupe d'utilisateurs


Dans cette version du logiciel, il n'existe pas de groupes d'utilisateurs (par exemple : les 3 utilisateurs jean, pierre et jacques regroupés sous le nom de cuisiniers)

Mais rien n'empêche d'écrire :

TODO : vérifier si on peut faire :

  • "default_agenda:add_acl" => "jean,pierre,jacques",

ou si il faut faire

  • "default_agenda:add_acl" => "jean",
  • "default_agenda:add_acl" => "pierre",
  • "default_agenda:add_acl" => "jacques",

??? pas très important !

exemple


Nous pourrons donc, par exemple, offrir à l'utilisateur connecté nathan le droit de modifier l'agenda en mentionnant quelque part (à voir plus bas) quelque chose qui ressemble à :

  • "default_agenda:add_acl" => "nathan",

Actions et utilisateurs


Dans l'exemple ci-dessus, default rappelle que cette définition n'est jamais qu'une valeur par défaut susceptible d'être encore modifiée selon des règles encore plus particulières (page par page).

agenda est le nom d'une action; normalement, ce devrait être lire l'agenda.

:add qualifie cette action : il s'agit ici d'ajouter des informations dans l'agenda.

nathan est l'utilisateur qui reçoit l'autorisation; nous aurions pu écrire "+" pour indiquer tout utilisateur connecté (on dit parfois utilisateur loggué) c'est à dire ayant introduit son login et son password (ou, si vous préferez, son identifiant et son mot de passe).

Actions


Une liste des principales actions concernées par les ACLs sera bientôt disponible ici.

Les ACLs dans la configuration par défaut


Dans le fichier kernel/config/wakka.config.default.php, rédigé en PHP mais compréhensible (?) pour un profane en informatique, on trouve les définitions suivantes :

  • "default_root_acl" => "!", /* Permissions par défaut pour le root */
  • "default_action_acl" => "*", /* Permission par défaut des actions */

  • /* exceptions pour des actions particulières : */
  • "default_read_acl" => "*", /* lire les pages */
  • "default_comments_acl" => "*", /* lire les commentaires */
  • "default_comments:add_acl" => "+", /* ajouter un commentaire (donc, dans ce cas + signifie qu'on réserve ce droit aux seuls utilisateurs connectés) ; notez qu'ici l'action comments est qualifiée par add */

  • /* une série de droits offerts par défaut à tous : en gros, on complète l'accès en lecture aux pages et fichiers */
  • "default_file_acl" => "*",
  • "default_header_acl" => "*",
  • "default_install_acl" => "*",
  • "default_footer_acl" => "*",
  • "default_config_acl" => "*",

  • /* quelques actions plus spéciales sont réservées : */
  • "default_login:mod_acl" => "!", /* ??? */
  • "default_account_acl" => "*", /* ??? */
  • "default_mail_acl" => "+",
  • "default_edit:acls_acl" => "+",
  • "default_edit:date_acl" => "+",
  • "default_edit:move_acl" => "!",

Les valeurs ci-dessus vont toutefois être modifiées dès l'installation.

A l'installation


Il est possible de définir les ACLs (pluriel de ACL) qui seront appliqués par défaut.
Pour celà il faut choisir un profil (ou AccesModel) parmi les suivants :
- OpenWiki : tout le monde peut tout faire
- PrivateWorkingGroup : les initiés et eux seuls peuvent tout faire
- PublicationCommunity : les rédacteurs seuls peuvent écrire mais tout le monde peut lire
- RootOnly : le bloc-note en ligne d'une seule personne, l'administrateur ou root.

En fait, dans la version 9.3-beta, il semble (?) y avoir un bug si nous choisissons autre chose que OpenWiki.

Cela n'est pas grave car nous pouvons modifier ultérieurement la configuration (voir plus bas).

Les ACLs dans les 4 profils


OpenWiki


Dans le profil OpenWiki, les valeurs suivantes sont différentes de celles ci-dessus (autrement dit, sont modifiées) :

"default_login:add_acl" => "*", /* ??? */
"default_edit_acl" => "*", /* modifier des pages */
"default_read_acl" => "*", /* bien sûr, lire les pages... */
"default_comments_acl" => "*", /* ... et les commentaires */
"default_files_acl" => "+", /* monter des fichiers */
"default_acls_acl" => "!" /* ??? */

On voit que tout le monde (donc "*") peut tout faire, sauf monter des fichiers (un peu dangereux si on laisse faire les pirates) ce qui est réservé aux utilisateurs connectés (donc "*") et gérer les droits ce qui est réservé à l'administrateur (donc "!").

PrivateWorkingGroup

Dans le profil PrivateWorkingGroup, toutes les actions sont réservées aux seuls utilisateurs connectés :

"default_action_acl" => "+"

Puisque cette définition intervient après, elle annule les dispositions relativement généreuses (droits en lecture) de la configuration par défaut.

PublicationCommunity


Dans la PublicationCommunity" on est plus libéral : lire les pages, les commentaires et accéder aux fichiers est désormais public, ce qui note par "*" :

"default_edit_acl" => "+",
"default_read_acl" => "*",
"default_comments_acl" => "*",
"default_files_acl" => "*",
"default_files:add_acl" => "+",
"default_acls_acl" => "+" /* ??? */

Ecrire les contenus et coopter ses membres (???) est toutefois un droit exclusif de la communauté des utilisateurs connectés.

RootOnly


Enfin, sans surprise, dans le cas du RootOnly, l'administrateur (le root) se réserve toutes les actions :

"default_action_acl" => "!"

ce qui annule, à nouveau, la relative générosité de la configuration par défaut.

Nos propres configurations


au départ


Il ne faut surtout pas aller modifier, comme une brute épaisse, le fichier de configuration qui se trouve dans le kernel (noyau permanent du logiciel).

Lors de l'installation, le fichier local/config/wakka.config.php a été créé; c'est là, en respectant prudemment la syntaxe du PHP, qu'il faut apporter les adaptations.

Attention : ce fichier contient aussi des paramètres relatifs à d'autres choses que les ACLs.

Puisque nous créons par défaut un OpenWiki, nous trouvons sans surprise dans ce fichier les valeurs suivantes :

"default_login:add_acl" => "*", /* ??? */
"default_edit_acl" => "*",
"default_read_acl" => "*",
"default_comments_acl" => "*",
"default_files_acl" => "+",
"default_acls_acl" => "!", /* ??? */

que nous allons donc modifier comme indiqué ci-dessous pour deux cas particuliers : adelin, un wiki à l'usage d'un groupe restreint, et marc, un bloc-note personnel mais public.

adelin (ou david)


Dans la configuration adelin, nous remplaçons par ceci :

/* ??? "default_register_acl" => "+", /* ??? */
"default_edit_acl" => "+",
"default_read_acl" => "+",
"default_comments_acl" => "+",
"default_comments:add_acl" => "+",
"default_agenda_acl" => "+", /* gérer l'agenda */
"default_agenda:add_acl" => "+", /* gérer l'agenda */
"default_mail_acl" => "*",
"default_files_acl" => "+",
/* ??? "default_acls_acl" => "!", /* ??? */
"default_file_acl" => "+",
"default_header_acl" => "+",
"default_install_acl" => "+",
"default_footer_acl" => "+",
"default_config_acl" => "+",

c'est à dire tous les droits à toute la communauté des utilisateurs connectés, sauf l'envoi de mails qui est autorisé pour le monde entier (pour permettre à quelqu'un qui a oublié son password ou qui frappe à la porte de contacter les responsables) et sauf la gestion suprême des droits réservé à l'administrateur.

marc


  • "default_edit_acl" => "+", */ seuls les membres peuvent écrire */
  • "default_read_acl" => "*", /* les visiteurs peuvent lire */
  • "default_comments_acl" => "*", /* les visiteurs peuvent lire les commentaires */
  • "default_files_acl" => "*", /* les visiteurs peuvent voir les fichiers */
  • "default_files:add_acl" => "+", /* seuls les membres peuvent en ajouter */
  • "default_mail_acl" => "*", /* les visiteurs peuvent envoyer des mails aux membres */
  • "default_comments:add_acl" => "*", /* les visiteurs peuvent ajouter des commentaires */
  • "default_me:add" => "+", /* empecher un visiteur de se créer un compte, les membres peuvent ajouter de nouveaux membres */
  • "default_agenda_acl" => "+", /* gérer l'agenda */
  • "default_agenda:add_acl" => "+", /* gérer l'agenda */
  • "default_file_acl" => "*",
  • "default_header_acl" => "*",
  • "default_install_acl" => "*",
  • "default_footer_acl" => "*",
  • "default_config_acl" => "*",
  • /* ??? "default_acls_acl" => "!", /* ??? */

ACLs page par page


Dans certains cas, il peut être utile de modifier les droits d'accès page par page.

Ce qu'il est possible de faire et comment le faire est décrit ici

Dans quels cas ?

Exemple A


Dans un wiki que je rends lisible au monde entier (la configuration marc ci-dessus), je peux décider que certaines pages (familliales, en construction, privées, etc) doivent être d'un accès plus limité.

Exemple B


Dans un wiki complètement fermé (la configuration adelin ci-dessus), on peut décider néanmoins que la page d'accueil soit publique pour contenir une explication, une possibilité d'inscription, etc.

Exemple C


On peut décider que des pages en cours d'élaboration soient publiquement modifiables et commentables; mais que par contre des citations originales, des extraits d'autres publications et les textes dans une version définitive ne puissent plus être modifiés mais puissent encore être commentés.

Exemple D


On peut vouloir se réserver temporairement les droits d'éditer une page sur la quelle on est occupé à travailler pour éviter que d'autres ne bousillent malencontreusement le contenu par une intervention simultanée.

A COMPARER


La gestion des droits d'accès des visiteurs, utilisateurs, rédacteurs, administrateurs, etc au site, aux pages, aux fonctionnalités est réglée par ce qu'on appelle, dans le jargon des wikis, des ACLs.

ACL


Un acronyme pour Acces Control Level.

Les ACLs sont définies, pratiquement, dans plusieurs fichiers de configuration, de manières qui peuvent paraître contradictoires : cette contradiction n'est qu'apparente, les nouvelles valeurs remplaçant les anciennes; nouvelles signifiant particulière par rapport à général, ou propre à une installation par rapport à par défaut, ou encore action qualifiée (à comprendre plus bas) par rapport à action générale.

Les personnes concernées


On distingue, par ordre décroissant d'importance :

  • l'administrateur ou root, noté dans les définitions par le caractère ! (point d'exclamation); dans cette version du logiciel, il n'existe qu'un seul administrateur; mais, voir ci-dessous, on peut aussi créer des droits particuliers pour des utilisateurs particuliers
  • un utilisateur particulier untel, ce qui sera noté par untel; bien entendu, cet utilisateur aura du se connecter (fournir son password); voir l'exemple plus bas.
  • tout utilisateur connecté (donc qui a fourni son password), noté par + (plus); attention : si un visiteur quelconque a le droit de s'inscrire lui-même, celà signifie que tout le monde peut virtuellement accéder aux droits de l'utilisateur connecté (ce n'est pas du tout un non sens : on peut choisir de ne laisser faire des modifications qu'à ceux qui ont, plus ou moins, annoncé leur identité).
  • tout visiteur (donc, le monde entier), noté par * (astérisque)

groupe d'utilisateurs


Dans cette version du logiciel, il n'existe pas de groupes d'utilisateurs (par exemple : les 3 utilisateurs jean, pierre et jacques regroupés sous le nom de cuisiniers)

Mais rien n'empêche d'écrire :

TODO : vérifier si on peut faire :

  • "default_agenda:add_acl" => "jean,pierre,jacques",

ou si il faut faire

  • "default_agenda:add_acl" => "jean",
  • "default_agenda:add_acl" => "pierre",
  • "default_agenda:add_acl" => "jacques",

??? pas très important !

exemple


Nous pourrons donc, par exemple, offrir à l'utilisateur connecté nathan le droit de modifier l'agenda en mentionnant quelque part (à voir plus bas) quelque chose qui ressemble à :

  • "default_agenda:add_acl" => "nathan",

Actions et utilisateurs


Dans l'exemple ci-dessus, default rappelle que cette définition n'est jamais qu'une valeur par défaut susceptible d'être encore modifiée selon des règles encore plus particulières (page par page).

agenda est le nom d'une action; normalement, ce devrait être lire l'agenda.

:add qualifie cette action : il s'agit ici d'ajouter des informations dans l'agenda.

nathan est l'utilisateur qui reçoit l'autorisation; nous aurions pu écrire "+" pour indiquer tout utilisateur connecté (on dit parfois utilisateur loggué) c'est à dire ayant introduit son login et son password (ou, si vous préferez, son identifiant et son mot de passe).

Fonctionnnalités contrôlables


Une liste des principales fonctionnalités concernées par les ACLs sera bientôt disponible ici.

Les ACLs dans la configuration par défaut


Dans le fichier kernel/config/wakka.config.default.php, rédigé en PHP mais compréhensible (?) pour un profane en informatique, on trouve les définitions suivantes :

"default_root_acl" => "!", /* Permissions par défaut pour le root */
"default_action_acl" => "*", /* Permission par défaut des actions */

/* exceptions pour des actions particulières : */
"default_read_acl" => "*", /* lire les pages */
"default_comments_acl" => "*", /* lire les commentaires */
"default_comments:add_acl" => "+", /* ajouter un commentaire (donc, dans ce cas + signifie qu'on réserve ce droit aux seuls utilisateurs connectés) ; notez qu'ici l'action comments est qualifiée par add */

/* une série de droits offerts par défaut à tous : en gros, on complète l'accès en lecture aux pages et fichiers */
"default_file_acl" => "*",
"default_header_acl" => "*",
"default_install_acl" => "*",
"default_footer_acl" => "*",
"default_config_acl" => "*",

/* quelques actions plus spéciales sont réservées : */
"default_login:mod_acl" => "!", /* ??? */
"default_account_acl" => "*", /* ??? */
"default_mail_acl" => "+",
"default_edit:acls_acl" => "+",
"default_edit:date_acl" => "+",
"default_edit:move_acl" => "!",

Les valeurs ci-dessus vont toutefois être modifiées dès l'installation.

A l'installation


Il est possible de définir les ACLs (pluriel de ACL) qui seront appliqués par défaut.
Pour celà il faut choisir un profil (ou AccesModel) parmi les suivants :
- OpenWiki : tout le monde peut tout faire
- PrivateWorkingGroup : les initiés et eux seuls peuvent tout faire
- PublicationCommunity : les rédacteurs seuls peuvent écrire mais tout le monde peut lire
- RootOnly : le bloc-note en ligne d'une seule personne, l'administrateur ou root.

En fait, dans la version 9.3-beta, il semble (?) y avoir un bug si nous choisissons autre chose que OpenWiki.

Cela n'est pas grave car nous pouvons modifier ultérieurement la configuration (voir plus bas).

D'autre part, certains profils, très sévères (comme notre profil pour "Site de collaboration documentaire pour groupe de travail fermé"), ne pourraient être définis dès l'installation car il serait alors impossible, même à l'administrateur, de s'y introduire.

Les ACLs dans les 4 profils

OpenWiki

Dans le profil "OpenWiki", les valeurs suivantes sont différentes de celles ci-dessus (autrement dit, sont modifiées) :

"default_login:add_acl" => "*", /* ??? */
"default_edit_acl" => "*", /* modifier des pages */
"default_read_acl" => "*", /* bien sûr, lire les pages... */
"default_comments_acl" => "*", /* ... et les commentaires */
"default_files_acl" => "+", /* monter des fichiers */
"default_acls_acl" => "!" /* ??? */

On voit que tout le monde (donc "*") peut tout faire, sauf monter des fichiers (un peu dangereux si on laisse faire les pirates) ce qui est réservé aux utilisateurs connectés (donc "*") et gérer les droits ce qui est réservé à l'administrateur (donc "!").

PrivateWorkingGroup

Dans le profil "PrivateWorkingGroup", toutes les actions sont réservées aux seuls utilisateurs connectés :

"default_action_acl" => "+"

Puisque cette définition intervient après, elle annule les dispositions relativement généreuses (droits en lecture) de la configuration par défaut.

PublicationCommunity

Dans la "PublicationCommunity"" on est plus libéral : lire les pages, les commentaires et accéder aux fichiers est désormais public, ce qui note par "*" :

"default_edit_acl" => "+",
"default_read_acl" => "*",
"default_comments_acl" => "*",
"default_files_acl" => "*",
"default_files:add_acl" => "+",
"default_acls_acl" => "+" /* ??? */

Ecrire les contenus et coopter ses membres (???) est toutefois un droit exclusif de la communauté des utilisateurs connectés.

RootOnly

Enfin, sans surprise, dans le cas du "RootOnly", l'administrateur (le root) se réserve toutes les actions :

"default_action_acl" => "!"

ce qui annule, à nouveau, la relative générosité de la configuration par défaut.

Nos propres configurations

au départ


Il ne faut surtout pas aller modifier, comme une brute épaisse, le fichier de configuration qui se trouve dans le kernel (noyau permanent du logiciel).

Lors de l'installation, le fichier local/config/wakka.config.php a été créé; c'est là, en respectant prudemment la syntaxe du PHP, qu'il faut apporter les adaptations.

Attention : ce fichier contient aussi des paramètres relatifs à d'autres choses que les ACLs.

Puisque nous créons par défaut un "OpenWiki", nous trouvons sans surprise dans ce fichier les valeurs suivantes :

"default_login:add_acl" => "*", /* ??? */
"default_edit_acl" => "*",
"default_read_acl" => "*",
"default_comments_acl" => "*",
"default_files_acl" => "+",
"default_acls_acl" => "!", /* ??? */

que nous allons donc modifier comme indiqué ci-dessous pour deux cas particuliers : "groupe de travail fermé" et bloc-note ouvert.

groupe de travail fermé


Dans cette configuration, nous remplaçons par ceci :

/* les 2 valeurs suivantes font un peu double emploi, car normalement elles devraient toujours avoir les mêmes valeurs */
"default_register_acl" => "+", /* pas d'inscription directe possible par le public : l'invite ne doit pas apparaître */
"default_me:add" => "+", /* les membres peuvent ajouter de nouveaux membres */

"default_edit_acl" => "+", /* modifier page */
"default_read_acl" => "+", /* lire page ; avant de jouer avec ça : vérifier que 'template' est public ! */
"default_comments_acl" => "+", /* lire commentaires */
"default_comments:add_acl" => "+", /* ajouter commentaires */
"default_agenda_acl" => "+", /* lire agenda */
"default_agenda:add_acl" => "+", /* ajouter événement */

"default_mail_acl" => "*", /* envoyer un mail : PUBLIC ! */

"default_files_acl" => "+", /* gérer les fichiers...*/
"default_pages_acl" => "+", /* ... et les pages d'un rédacteur */

"default_log_acl" => "+", /* historique */
/* "default_user_acl" => "+", */
/* la description des rédacteurs (y compris ceux des pages publiques) ne peut être connue du public ;
toutefois ceci provoque un message malvenu ;
nous résolvons le problème autrement */

"default_acls_acl" => "!", /* ??? */

"default_file_acl" => "+", /* */
"default_header_acl" => "+", /* */
"default_install_acl" => "+", /* */
"default_footer_acl" => "+", /* */

"default_config_acl" => "*", /* */


c'est à dire tous les droits à toute la communauté des utilisateurs connectés, sauf l'envoi de mails qui est autorisé pour le monde entier (pour permettre à quelqu'un qui a oublié son password ou qui frappe à la porte de contacter les responsables).

Trucs et ficelles :

  • Ne monter cette config que alors qu'on est connecté comme root (sinon on ne pourra plus entrer dans le site).
  • S'empresser de déroger aux règles strictes en rendant publique au minimum la page d'accueil et (là est le truc!) la page 'template'.

bloc-note public


"default_register_acl" => "+", /* pas d'inscription spontanée */
"default_me:add" => "+", /* les membres peuvent ajouter de nouveaux membres */


"default_edit_acl" => "+", */ seuls les membres peuvent écrire */
"default_read_acl" => "*", /* les visiteurs peuvent lire */
"default_comments_acl" => "*", /* les visiteurs peuvent lire les commentaires */
"default_comments:add_acl" => "*", /* les visiteurs peuvent ajouter des commentaires */

"default_file_acl" => "*",

"default_files_acl" => "+",
"default_pages_acl" => "+",
"default_files:add_acl" => "+", /* seuls les membres peuvent ajouter des fichiers */

"default_mail_acl" => "*", /* les visiteurs peuvent envoyer des mails aux membres */
"default_agenda_acl" => "*", /* voir l'agenda */
"default_agenda:add_acl" => "+", /* gérer l'agenda */

"default_header_acl" => "*",
"default_install_acl" => "*",
"default_footer_acl" => "*",
"default_config_acl" => "*",

"default_acls_acl" => "!" , /* TODO : comprendre! ??? */

ACLs page par page


Dans certains cas, il peut être utile de modifier les droits d'accès page par page.

Ce qu'il est possible de faire et comment le faire est décrit ici

Dans quels cas ?

Exemple A


Dans un wiki que je rends lisible au monde entier (la configuration bloc-note public ci-dessus), je peux décider que certaines pages (familliales, en construction, privées, etc) doivent être d'un accès plus limité.

Exemple B


Dans un wiki complètement fermé (la configuration groupe de travail fermé ci-dessus), on peut décider néanmoins que la page d'accueil soit publique pour contenir une explication, une possibilité d'inscription, etc.

Exemple C


On peut décider que des pages en cours d'élaboration soient publiquement modifiables et commentables; mais que par contre des citations originales, des extraits d'autres publications et les textes dans une version définitive ne puissent plus être modifiés mais puissent encore être commentés.

Exemple D


On peut vouloir se réserver temporairement les droits d'éditer une page sur la quelle on est occupé à travailler pour éviter que d'autres ne bousillent malencontreusement le contenu par une intervention simultanée.