Skip to Content
WordPressPartie 2 — Utiliser & administrerUtilisateurs, rôles & capabilities

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ôlePeut…Ne peut pas…
AdministrateurTout : 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é :

CapabilityAutorise…
readLire le contenu (base).
edit_postsÉcrire/éditer ses articles.
edit_others_postsÉditer les articles des autres.
publish_postsPublier des articles.
delete_postsSupprimer des articles.
upload_filesUploader des médias.
moderate_commentsModérer les commentaires.
manage_optionsModifier les réglages du site (≈ admin).
install_plugins, edit_themesGé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

  1. Un client veut que trois stagiaires rédigent des articles soumis à validation avant publication. Quel rôle leur donnez-vous ?
  2. Pourquoi current_user_can('publish_posts') est-il préférable à if ($role === 'author') ?
  3. Reliez chaque capability à ce qu’elle autorise : manage_options, edit_others_posts, upload_files.

✅ Solution

  1. Contributeur : ils peuvent rédiger et éditer leurs articles mais pas les publier (soumission « en attente de relecture ») ; un Éditeur/Admin valide et publie.
  2. 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.
  3. manage_options → modifier les réglages du site (≈ admin) ; edit_others_posts → éditer les articles des autres ; upload_filesuploader 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.