Question abordée lors de nos formations sur le CMS Joomla! comment fonctionnent les droits ? On désigne dans un premier temps par le mot "droits" tout ce qui définit ce que les utilisateurs (en front ou en back office) peuvent voir et faire sur le site. Nous allons découvrir qu'il faut faire une distinction importante.
Avec le CMS Joomla! on distingue en effet ce qu'on peut voir (les niveaux d'acces ou ACL -Access Control Lists- en anglais) de ce qu'on peut faire (les droits à proprement parler).
Ces deux notions sont très différentes et sont gérées en des endroits très différents du back office. Pour autant elles tirent toutes les deux leur origine dans la définition des groupes d'utilisateurs.
Les utilisateurs dans Joomla! sont des comptes qui peuvent se connecter en front ou en back office. Il existe aussi l'utilisateur 'invité' qui regroupe tout internaute qui visite le site sans se connecter.
Un utilisateur possède un identifiant et un email unique. Il appartient aussi à au moins un groupe d'utilisateurs (il peut faire partie de plusieurs groupes).
La notion fondamentale pour comprendre les niveaux d'accès et les droits de Joomla! est cette notion de groupe. Dans 99% des cas on ne va pas attribuer de droits ou de niveau d'accès à un utilisateur isolé mais à un groupe. L'utilisateur hérite des droits et des niveaux d'accès des groupes auxquels il appartient.
On remarquera que les groupes sont rangés selon une hiérarchie qui prendra toute son importance dans la gestion des droits et des niveaux d'accès.
Dans le menu Système / configuration et l'onglet DROITS on retrouve par groupe ce que les utilisateurs d'un groupent peuvent faire:
C'est le point de départ pour cette matrice de droits qui va ensuite être surchargée dans les différents composants.
La hiérarchie des groupes définit un héritage des droits qu'on peut surcharger. La colonne 'droits appliqués' affiche le droit effectif pour le groupe sélectionné selon ce qui a été définit ici et aux niveaux supérieurs.
Une des grandes forces de la gestion de droits avec Joomla! reside dans son système de surcharge et d'héritage de la matrice de droits généraux composant par composant.
Ainsi pour le gestionnaire d'articles et de catégories (composant com_content) on retrouve cette matrice de droits au travers du bouton paramêtre
Ce même bouton Paramêtre se retrouve pour tous les composants (ou presque) de Joomla! Ainsi pour les menus on a aussi la matrice des droits par groupes.
Quand on regarde le détail de chaque droit pour chaque groupe on voit que plusieurs valeurs sont possibles :
Les niveaux d'accès contrôle ce qui peut être vu par les utilisateurs de tel ou tel groupe. On doit les comparer à des badges qu'on remet à des visiteurs ou employés d'une entreprise sensible dans laquelle toutes les salles ne sont pas accessibles par tout le monde.
Au départ un niveau d'accès n'est qu'un nom qui est attribué à un ou plusieurs groupes:
Dans Joomla! toutes les ressources (articles, catégories, lien de menu, module, etc...) est affectée d'un ACL. A l'affichage de chaque page Joomla! compare les ACLs de chaque ressource (ou élément de la page) avec le niveau d'accès attribué à l'internaute au travers des groupes auxquels il appartient. Par exemple pour les modules :
ou pour les articles:
Remarque importante: On distingue l'accès PUBLIC qui désigne en fait tout le monde (qu'il soit enregistré ou non) de l'accès INVITE qui désigne les internautes uniquement non enregistrés.
Ainsi selon l'appartenance à tel ou tel groupe un internaute se vera présenté un affichage différent de la même page (même url).
Comme toujours SEBLOD permet d'étendre le CMS Joomla! tout en le respectant, c'est à dire sans le remplacer. Les notions de droits et de niveaux d'accès vont donc être identiques avec SEBLOD mais avec une granularité beaucoup plus fine.
On a vu précédemment que la matrice de droits générale était surchargée par composant: chaque composant peut redéfinir les droits qui s'appliquent aux éléments qu'il contrôle (menus, mmodules, articles, etc...).
Avec SEBLOD on étend ce principe à un niveau supplémentaire : En effet chaque type de contenu hérite des articles Joomla! standards. Pour chaque type de contenu on va donc pouvoir modifier la configuration des droits qui hérite de celle de la gestion des articles qui hérite elle-même de la configuration générale.
Chaque contenu SEBLOD (c'est à dire un super article Joomla!) dispose naturellement d'un niveau d'accès mais on peut descendre au niveau de chaque champ. Ainsi un même contenu affichera ou masquera des champs à un utilisateur selon son appartenance à tel ou tel groupes. Cela s'effectue au niveau de chaque champ auquel on affecte un niveau d'accès:
Les ACLs sont aussi utilisé par SEBLOD pour gérer les projets multisites.
Si les domaines ont été définis en mode 'avancé':
alors on se retrouve avec les ACLs suivantes :
Ainsi pour chaque site SEBLOD définit un jeu d'ACL. Le niveau d'accès PUBLIC d'un projet Joomla! standard se transforme ici en un niveau d'accès 'public' pour chaque site.