Les utilisateurs inscrits sur un site n’ont pas tous les mêmes droits. Chacun possède des rôles pré-établis en fonction de ce qu’ils pourront faire ou non. On va voir dans ce cours quels sont ces rôles, comment en créer de nouveaux et enfin comment tester les droits d’un utilisateur via PHP.
Sommaire du cours
Lorsque vous installez un nouveau site, vous en êtes de facto l’administrateur : vous avez tous les droits. Quand vous ajoutez un nouvel utilisateur, il faudra sélectionner un rôle, et c’est une tâche à ne pas négliger.
En effet, il faut savoir définir des droits adaptés en fonction de la tâche assignée à la personne, de ses compétences et de la confiance qu’on lui accorde.
Si vous donnez tous les droits à un rédacteur, il pourrait malencontreusement modifier des paramètres ou supprimer des extensions nécessaires au bon fonctionnement du site.
Pire encore, mettez un client qui n’est pas très à l’aise avec l’outil comme administrateur, et c’est la catastrophe assurée !
Commençons déjà par voir quels sont les rôles qui sont proposés par défaut dans WordPress.
Les rôles par défaut dans WordPress
Il existe nativement 5 rôles différents, et chacun possède ses propres droits et limites.

Les 5 rôles par défaut
On va passer rapidement en revue chaque rôle :
L’administrateur

L’administrateur, il a tous les droits. Il peut modifier la configuration du site, changer de thème, installer et supprimer des extensions, gérer toutes les publications, importer des médias… bref, c’est Dieu le père. Le premier utilisateur créé avec le site sera forcément administrateur.
L’éditeur

Juste en dessous, il y a l’éditeur. Ce rôle ne peut pas changer les réglages, installer des extension ou des thèmes. Il est limité aux fonctions de publication sur le site. Il peut publier ses propres articles, ceux des autres, et gérer les commentaires.
C’est souvent le rôle qu’on attribue à un client, de cette manière il a un accès complet à son contenu, mais pas aux réglages sensibles du site.
L’auteur

L’auteur peut créer des articles, les publier, répondre à ses commentaires. Mais il ne peut pas modifier ou publier les articles des autres. C’est le rôle idéal pour un rédacteur web qui doit écrire des contenus sur votre site, ou d’un rédacteur régulier sur votre blog.
Le contributeur

Le contributeur commence à avoir des droits restreints : il peut créer un article, mais ne peut pas le publier. Il faudra alors qu’un éditeur le valide à sa place. Chose contraignante : le contributeur ne peut même pas importer un média (image, document, vidéo).
Ce rôle est idéal pour le « guest blogging », c’est-à-dire lorsque vous invitez une personne à écrire exceptionnellement un article sur votre blog.
L’abonné

Ce dernier ne peut rien faire, à part remplir son profil pour ne plus avoir à indiquer son nom et e-mail à chaque fois qu’il veut publier un commentaire. Il a un accès restreint à l’interface d’administration.
Le saviez-vous ?
Il existe un 6ème rôle « Super Admin » si vous activez WordPress Multisite. Le super Admin possède tous les droits, sur chacun des sites du réseau et la configuration de celui-ci.
Pour votre client, éditeur ou administrateur ?
Vient alors l’épineuse question du rôle à attribuer à un client. Comme on vient de le voir, à part administrateur et éditeur, les autres rôles n’ont d’utilité que si votre site possède une ligne éditoriale au travers d’un blog ou d’un magazine.
Si vous passez votre client administrateur, il aura tous les droits, et risquerait de tout casser. Mais si vous le passez éditeur, il ne pourra pas accéder aux configurations de certaines extensions, et c’est parfois bien gênant.
Mais on pourrait tout aussi bien créer un rôle sur mesure, en choisissant quels sont les droits qu’il aura ou non parmi une liste que l’on appelle les capacités.
Les extensions de gestion de rôles
Il existe des extensions pour gérer les rôles utilisateurs en profondeur, comme par exemple User Role Editor. Il permet de définir de nouveaux rôles et de définir ses capacités.
Créer et tester les rôles en PHP
Si vous êtes plutôt du genre à tout faire vous-même, il est bien évidemment possible de créer des rôles, assigner des droits et contrôler le tout avec du code !
Créer un rôle PHP
Pour créer un rôle en PHP, on va utiliser la fonction add_role()
de WordPress. On pourrait créer un rôle pour le référenceur par exemple : il pourrait modifier les publications, importer des médias et même modifier les paramètres du site.
Il n’aurait pas le droit par contre d’ajouter de nouvelles extensions ou créer de nouveaux utilisateurs, c’est ce qui le différencie d’un administrateur.
Voici le code correspondant, à placer dans votre functions.php
:
Afin d’éviter de tenter à chaque fois de créer le rôle pour rien, on donc va enregistrer l’information dans une option que j’appelle custom_roles_version
: la première fois, cette option n’existe pas, du coup le code exécute la boucle, et créé le rôle. Et pour toutes les fois suivantes, le code sera ignoré.
Pour une extension, ce sera beaucoup plus simple car il existe un hook qui ne se lance qu’à l’activation de celle-ci.
Si un jour vous souhaitez supprimer un rôle, il faudra utiliser la fonction remove_role()
.
Rôle et capacités
Un rôle, c’est la somme de ses capacités (ou capabilities en anglais). Et une capacité, c’est le droit de faire telle ou telle chose. Dans WordPress il existe des dizaines de capacités correspondant à des actions bien précises. Voici quelques exemples :
edit_pages
: définit si une personne à le droit de modifier n’importe quelle page ;delete_posts
: définit si une personne à le droit de supprimer des articles ;activate_plugins
: si l’utilisateur peut activer une extension ;manage_options
: si l’utilisateur peut modifier les paramètres du site.
Par défaut, seul l’administrateur possède la capacité manage_options
. Mais du coup, vous pourriez l’utiliser dans un rôle personnalisé.
Dans l’exemple précédent, j’ai justement attribué quelques capacités à mon rôle SEO Manager :
Pour connaître tous les rôles et les capacités dans WordPress, je vous invite à aller voir la documentation officielle :
Changer les capacités après avoir créé un rôle
Du coup, si vous souhaitez changer les droits d’un rôle après l’avoir créé, il faudra utiliser la fonction add_cap()
ou remove_cap()
:
Et afin de bien l’intégrer à notre système qui évite d’exécuter inutilement le code à chaque fois, on incrémente la version de notre option :
De cette manière, on s’assure qu’à la prochaine exécution, le thème ou l’extension disposent du bon rôle avec les bonnes capacités.
Tester le rôle ou les capacités de l’utilisateur connecté
Dans votre code, si vous avez besoin de vérifier que votre utilisateur est bien connecté, et possède les bons droits, il existe la fonction current_user_can()
.
Elle permet de tester 2 choses :
- Soit directement le niveau de rôle de l’utilisateur ;
- Ou alors tester une capacité en particulier.
Sur un site simple, le test du rôle sera suffisant, mais si vous devez gérer beaucoup de rôles différents, il sera peut-être plus simple de tester une capacité en particulier, comme par exemple manage_options
.
Pour plus d’informations à propos de cette fonction, consultez la documentation.
On va en rester là pour le moment avec les rôles utilisateurs, mais on les manipulera plus en détails dans la formation Développer des extensions.
WordPress montre une fois de plus qu’au delà des concepts proposés par défaut, on peut toujours étendre le système pour palier à nos besoins spécifiques. Et les rôles ne dérogent pas à la règle.
Pour une sécurité maximale sur votre site, attribuez le bon rôle à vos utilisateurs, et pensez à tester votre code grâce aux fonctions que l’on vient de voir.
Christophe CARON
Le 20 janvier 2023
Bonjour, l’article est top par contre il y a une faute que j’ai repéré:
dans la partie Rôle et capacités
tu écris la variable $capacities puis tu utilises $capabilities
Maxime BJ
Le 20 janvier 2023
Je viens de corriger. Bien joué et merci pour ta contribution !