Chapitre 2.2 — Utilisateurs, rôles & capabilities
⏱️ TL;DR — WordPress gère les permissions par un modèle à deux niveaux : les rôles (Administrateur, Éditeur, Auteur, Contributeur, Abonné) sont des paquets de capabilities, et les capabilities sont les droits atomiques (
edit_posts,publish_posts,manage_options…). En code, on ne teste jamais un rôle, on teste une capability :current_user_can('edit_posts'). Comprendre ce modèle maintenant vous évitera les pires failles de sécurité de vos plugins (Partie 7) — c’est le fondement de l’autorisation dans WordPress.
🎯 Objectifs
- Connaître les rôles natifs et ce que chacun peut faire.
- Comprendre le modèle rôle = ensemble de capabilities.
- Savoir pourquoi on teste une capability, pas un rôle.
- Appliquer le principe de moindre privilège à la gestion des comptes.
1. Les rôles natifs
WordPress fournit cinq rôles par défaut (du plus puissant au plus limité) :
| Rôle | Peut… | Ne peut pas… |
|---|---|---|
| Administrateur | Tout : gérer réglages, plugins, thèmes, utilisateurs, tout le contenu. | (Sur un multisite, encore au-dessus : le Super Admin.) |
| Éditeur (Editor) | Créer/publier/éditer tous les contenus (y compris ceux des autres), modérer les commentaires. | Gérer réglages, plugins, thèmes, utilisateurs. |
| Auteur (Author) | Créer/publier/éditer ses propres articles, uploader des médias. | Toucher aux contenus des autres. |
| Contributeur (Contributor) | Rédiger/éditer ses propres articles, sans publier (soumission pour relecture). | Publier, uploader des médias. |
| Abonné (Subscriber) | Gérer son profil, lire. | Créer du contenu. |
⚠️ Piège — Ne donnez pas le rôle Administrateur par facilité. Un admin peut installer des plugins, éditer du code (thème/plugin depuis l’admin), gérer les autres comptes — donc compromettre tout le site. Un rédacteur n’a besoin que d’Auteur ou Éditeur. C’est le moindre privilège (§4).
2. Le vrai modèle : les capabilities
Un rôle n’est qu’une étiquette attachée à une liste de capabilities. Une capability est un droit atomique et nommé :
| Capability | Autorise… |
|---|---|
read | Lire le contenu (base). |
edit_posts | Écrire/éditer ses articles. |
edit_others_posts | Éditer les articles des autres. |
publish_posts | Publier des articles. |
delete_posts | Supprimer des articles. |
upload_files | Uploader des médias. |
moderate_comments | Modérer les commentaires. |
manage_options | Modifier les réglages du site (≈ admin). |
install_plugins, edit_themes… | Gérer plugins/thèmes/code. |
Un Éditeur, c’est simplement : read + edit_posts + edit_others_posts + publish_posts + delete_others_posts + moderate_comments + … (mais pas manage_options). Un Auteur a publish_posts mais pas edit_others_posts.
💡 Pour un dev React — Oubliez « admin/user » binaire. Pensez permissions granulaires (comme des scopes OAuth ou un RBAC fin) : chaque action sensible exige une capability précise. Un rôle = un preset de scopes. Et surtout : côté serveur, l’autorisation se vérifie toujours par la capability, jamais par « est-ce que c’est un admin ? ».
3. La règle d’or : tester une capability, pas un rôle
En développement (Partie 7), la vérification d’autorisation se fait avec current_user_can() :
// ✅ BON : on teste le DROIT
if ( current_user_can( 'edit_posts' ) ) {
// afficher le bouton / exécuter l'action
}
// ❌ MAUVAIS : on teste le RÔLE
if ( in_array( 'editor', wp_get_current_user()->roles, true ) ) {
// fragile, contournable, faux
}Pourquoi ? Parce que :
- les rôles sont personnalisables : un site peut renommer, créer, ou modifier des rôles ; « editor » n’a pas partout les mêmes droits ;
- des plugins (adhésion, e-commerce) ajoutent leurs propres rôles et capabilities ;
- tester la capability exprime l’intention réelle (« cette personne a-t-elle le droit de faire ça ? ») et reste correct quels que soient les rôles en place.
Retenez cette phrase, elle reviendra : on autorise par capability. Oublier un current_user_can() (ou un nonce) sur une action est la faille classique des plugins (Partie 7 & 11).
4. Le principe de moindre privilège
Donnez à chaque compte le rôle le plus faible qui lui permet de faire son travail :
- Un rédacteur externe qui ne doit pas publier sans relecture → Contributeur.
- Un rédacteur autonome → Auteur.
- Un responsable éditorial → Éditeur.
- Administrateur : réservé à vous / au responsable technique, comptes rares et nommément identifiés.
Bénéfices : moins de risques d’erreur, surface d’attaque réduite (un compte peu privilégié compromis fait moins de dégâts), conformité.
📚 Aller plus loin — Sur un multisite (Partie 11), un niveau supplémentaire existe : le Super Admin, qui gère l’ensemble du réseau (tous les sites, plugins réseau, etc.). Les rôles ci-dessus s’appliquent alors par site. On peut aussi créer des rôles sur mesure en code (
add_role()) ou avec un plugin de gestion des rôles.
5. Gérer les utilisateurs (côté admin)
- Utilisateurs → Tous les utilisateurs : liste, filtres par rôle.
- Ajouter : e-mail, identifiant, rôle. WordPress peut envoyer un lien de définition de mot de passe.
- Modifier son profil : chaque utilisateur gère ses infos ; l’admin peut changer le rôle des autres.
- Sécurité des comptes : mots de passe forts (WordPress en génère), et pour les comptes sensibles, activer une double authentification (via plugin) — voir Partie 11.
✏️ Exercices
- Un client veut que trois stagiaires rédigent des articles soumis à validation avant publication. Quel rôle leur donnez-vous ?
- Pourquoi
current_user_can('publish_posts')est-il préférable àif ($role === 'author')? - Reliez chaque capability à ce qu’elle autorise :
manage_options,edit_others_posts,upload_files.
✅ Solution
- Contributeur : ils peuvent rédiger et éditer leurs articles mais pas les publier (soumission « en attente de relecture ») ; un Éditeur/Admin valide et publie.
- Parce que les rôles sont personnalisables et que des plugins ajoutent des rôles/capabilities : tester la capability exprime le droit réel et reste correct quel que soit le rôle. Tester un nom de rôle est fragile et contournable.
manage_options→ modifier les réglages du site (≈ admin) ;edit_others_posts→ éditer les articles des autres ;upload_files→ uploader des médias.
🧠 Quiz de révision
1. Citez les cinq rôles natifs.
Administrateur, Éditeur, Auteur, Contributeur, Abonné.
2. Qu’est-ce qu’une capability ?
Un droit atomique nommé (edit_posts, manage_options…). Un rôle est un ensemble de capabilities.
3. Quelle fonction teste une autorisation en code ?
current_user_can( 'capability' ) — on teste toujours une capability, jamais un nom de rôle.
4. Différence Auteur vs Contributeur ?
L’Auteur peut publier ses articles et uploader des médias ; le Contributeur rédige ses articles mais ne peut pas publier ni uploader.
5. Qu’est-ce que le principe de moindre privilège ?
Attribuer à chaque compte le rôle le plus faible suffisant à sa tâche, pour réduire risques d’erreur et surface d’attaque.
Chapitre suivant : Contenus : articles, pages, médias.