Maison > Tutoriel CMS > WordPresse > Maîtriser les rôles et capacités WordPress

Maîtriser les rôles et capacités WordPress

Christopher Nolan
Libérer: 2025-02-16 11:49:08
original
360 Les gens l'ont consulté

Gestion des utilisateurs WordPress: analyse approfondie des rôles et autorisations

Le système de gestion des utilisateurs de WordPress est basé sur des rôles et des autorisations. Un rôle est une entité qui contient un nom unique et un ensemble d'autorisations, chacune définit le niveau d'accès aux caractéristiques spécifiques à la plate-forme de ce rôle. Faisons des mécanismes de travail des rôles et des autorisations WordPress.

points clés

  • La gestion des utilisateurs de WordPress est basée sur les rôles et les autorisations. Un rôle a un nom unique et un ensemble d'autorisations qui définissent le niveau d'accès à différentes fonctionnalités de la plate-forme par un rôle.
  • WordPress fournit une API complète pour personnaliser les rôles et leurs autorisations. Des fonctions telles que add_role(), remove_role(), add_cap() et remove_cap() peuvent être utilisées pour gérer les rôles et les autorisations. Cependant, vous devez faire attention à l'accès et aux performances de la base de données lors de l'utilisation de ces fonctions.
  • Il existe plusieurs façons d'éviter les problèmes de base de données lorsqu'ils traitent des rôles et des autorisations. Une façon consiste à déclencher le code uniquement lorsque le plugin est activé, vous pouvez utiliser la fonction register_activation_hook(). Une autre façon consiste à contourner la base de données WordPress en définissant la variable globale $wp_user_roles.

Retour au mécanisme des scènes

Stockage des rôles

La liste de rôle et d'autorisation par défaut est disponible sur WordPress Codex.

La base de données

stocke cette liste dans le tableau wp_options.

Il utilise la clé sérialisée wp_user_roles.

Mastering WordPress Roles and Capabilities Les données désérialisées sont les suivantes:

<code>array(
    'administrator' => array(
        'name'         => '管理员',
        'capabilities' => array(
            'switch_themes'          => true,
            'edit_themes'            => true,
            'activate_plugins'       => true,
            'edit_plugins'           => true,
            'edit_users'             => true,
            // [...]
        )
    ),
    'contributor' => array(
        'name'         => '投稿者',
        'capabilities' => array(
            'delete_pages'           => true,
            'delete_others_pages'    => true,
            'delete_published_pages' => true,
            'delete_posts'           => true,
            // [...]
        )
    ),
    // [...]
);</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Ces métadonnées sont automatiquement définies lorsqu'un nouveau site WordPress est installé.

Lorsque WordPress démarre, la classe

charge la liste de la base de données. WP_Roles

Cela se produit entre

et plugins_loaded crochets. init

lier l'utilisateur au rôle

WordPress utilise

stocké dans la table wp_usermeta pour relier les utilisateurs à leurs rôles. meta_key

Après la désérialisation, les métadonnées sont les suivantes: Mastering WordPress Roles and Capabilities

<code>array(
    'administrator' => true
)</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Notez que WordPress utilise des tableaux, bien que les utilisateurs ne puissent avoir qu'un seul rôle à la fois, nous verrons pourquoi plus tard.

Aussi, rappelez-vous

est le préfixe du blog actuel. wp_

(nous pouvons l'obtenir en utilisant la fonction

). $GLOBALS['wpdb']->get_blog_prefix()

Dans une installation multi-sites, cela permet aux utilisateurs d'utiliser différents rôles dans différents cas:

  • = & gt; wp_capabilities a:1:{s:13:"administrator";b:1;} = & gt;
  • = & gt; wp_10_capabilities a:1:{s:11:"contributor";b:1;}
  • wp_15_capabilities Cette règle s'applique également à l'entrée a:1:{s:10:"subscriber";b:1;} que nous avons vue dans le tableau
  • .
  • Enfin, nous pouvons voir les métadonnées wp_user_level ainsi que le rôle.

    Il est utilisé pour gérer les caractères dans des versions plus anciennes de WordPress et est désormais obsolète.

    Utiliser les autorisations dans le code central

    Nous avons appris comment les rôles sont chargés et liés aux utilisateurs;

    Certaines autorisations par défaut sont codées en dur dans le code de base WordPress.

    Par exemple, lorsque l'écran du plugin est chargé, il vérifiera si l'utilisateur actuel peut gérer le plugin en exécutant le code suivant:

    <code>array(
        'administrator' => array(
            'name'         => '管理员',
            'capabilities' => array(
                'switch_themes'          => true,
                'edit_themes'            => true,
                'activate_plugins'       => true,
                'edit_plugins'           => true,
                'edit_users'             => true,
                // [...]
            )
        ),
        'contributor' => array(
            'name'         => '投稿者',
            'capabilities' => array(
                'delete_pages'           => true,
                'delete_others_pages'    => true,
                'delete_published_pages' => true,
                'delete_posts'           => true,
                // [...]
            )
        ),
        // [...]
    );</code>
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion
    Les rôles

    ne sont jamais codés en dur;

    Utilisation des rôles et des autorisations: API WordPress

    API Access

    WordPress fournit les fonctions globales suivantes pour nous aider à gérer les rôles.

    current_user_can()

    Vérifiez si l'utilisateur actuel a les autorisations requises.

    <code>array(
        'administrator' => true
    )</code>
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    WP_User::has_cap

    Vérifiez si un utilisateur spécifique a la permission.

    <code>if (!current_user_can('activate_plugins'))
    {
        wp_die(__('您没有足够的权限来管理此站点的插件。'));
    }</code>
    Copier après la connexion
    Copier après la connexion

    Nous pouvons remarquer que current_user_can utilise cette fonction.

    get_editable_roles()

    revient à des rôles modifiables.

    <code>add_action('init', function()
    {
        if (current_user_can('install_plugins'))
        {
            echo '您可以安装插件';
        }
        else
        {
            echo '您不能安装插件';
        }
    });</code>
    Copier après la connexion
    Copier après la connexion

    Cette liste peut être écrasée par les filtres editable_roles, nous ne devons donc pas compter sur cette fonction pour obtenir la liste complète des rôles sur le site Web.

    Veuillez noter l'utilisation du crochet admin_init, car la fonction n'a pas encore été chargée dans le crochet init.

    get_role()

    Obtenez WP_Role objet basé sur sa limace.

    <code>add_action('init', function()   
    {
        $user = get_user_by('slug', 'admin');
        if ($user->has_cap('install_plugins'))
        {
            echo '管理员可以安装插件';
        }
        else
        {
            echo '管理员不能安装插件';
        }
    });</code>
    Copier après la connexion
    Copier après la connexion

    WP_Role::has_cap()

    Vérifiez si le rôle a les autorisations requises.

    <code>add_action('admin_init', function()
    {
        $roles = get_editable_roles();
        var_dump($roles);
    });</code>
    Copier après la connexion
    Copier après la connexion

    API personnalisée

    WordPress fournit également une API complète pour personnaliser les rôles et leurs autorisations.

    add_role()

    Enregistrez un nouveau rôle dans la base de données.

    <code>add_action('init', function()
    {
        $role = get_role('administrator');
        var_dump($role);
    });
    
    // 这将打印:
    // WP_Role 对象
    // (
    //     [name] => administrator
    //     [capabilities] => Array
    //         (
    //             [switch_themes] => 1
    //             [edit_themes] => 1
    //             [activate_plugins] => 1
    //             [edit_plugins] => 1
    //             [...]</code>
    Copier après la connexion
    Copier après la connexion

    remove_role()

    Si présent, supprimez le rôle requis de la base de données.

    <code>add_action('init', function()
    {
        $role = get_role('administrator');
        var_dump($role->has_cap('install_plugins')); // 打印 TRUE
    });</code>
    Copier après la connexion
    Copier après la connexion

    WP_Role::add_cap()

    Ajouter des autorisations au rôle.

    <code>add_action('init', function()
    {
        add_role('plugins_manager', '插件管理员', array(
            'install_plugins',
            'activate_plugins',
            'edit_plugins'
        ));
    });</code>
    Copier après la connexion

    Cela peut être des autorisations de base (install_plugins, edit_posts…) ou n'importe quelle chaîne personnalisée (my_awesome_plugin_cap).

    Il nous permet d'enregistrer autant d'autorisations personnalisées que possible pour notre plugin.

    WP_Role::remove_cap()

    s'il existe, supprimez les autorisations du rôle.

    <code>add_action('init', function()
    {
        remove_role('plugins_manager');
    });</code>
    Copier après la connexion

    WP_User::add_role()

    Ajouter des rôles à un utilisateur donné.

    <code>add_action('init', function()
    {
        $role = get_role('contributor');
        $role->add_cap('install_plugins');
    });</code>
    Copier après la connexion

    Cette fonction vous permet de définir théoriquement plusieurs rôles pour le même utilisateur.

    Étant donné que le backend WordPress affiche et gère un rôle par utilisateur, nous ne devons pas ajouter plusieurs rôles pour les utilisateurs et devons toujours utiliser WP_User::remove_role() avant d'ajouter un nouveau rôle.

    WP_User::remove_role()

    supprimer les rôles de l'utilisateur donné.

    <code>add_action('init', function()
    {
        $role = get_role('contributor');
        $role->remove_cap('install_plugins');
    });</code>
    Copier après la connexion

    WP_User::add_cap()

    Ajouter des autorisations à un utilisateur donné.

    <code>array(
        'administrator' => array(
            'name'         => '管理员',
            'capabilities' => array(
                'switch_themes'          => true,
                'edit_themes'            => true,
                'activate_plugins'       => true,
                'edit_plugins'           => true,
                'edit_users'             => true,
                // [...]
            )
        ),
        'contributor' => array(
            'name'         => '投稿者',
            'capabilities' => array(
                'delete_pages'           => true,
                'delete_others_pages'    => true,
                'delete_published_pages' => true,
                'delete_posts'           => true,
                // [...]
            )
        ),
        // [...]
    );</code>
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    Mastering WordPress Roles and Capabilities Ceci est très utile si nous voulons ajouter une seule autorisation à l'utilisateur sans avoir à créer un rôle complet.

    WP_User::remove_cap()

    Supprimer les autorisations de l'utilisateur donné.

    <code>array(
        'administrator' => true
    )</code>
    Copier après la connexion
    Copier après la connexion
    Copier après la connexion

    Certains problèmes avec API WordPress

    En dehors d'une question, les fonctions que nous voyons sont bonnes: l'accès et les performances de la base de données.

    sur quoi nous nous concentrons principalement lorsque nous traitons des rôles et des autorisations, c'est quand notre code devrait-il être déclenché?

    Pour expliquer cela, jetons un coup d'œil au code de base WordPress.

    Tout d'abord, nous voulons ajouter un nouveau caractère vide:

    <code>if (!current_user_can('activate_plugins'))
    {
        wp_die(__('您没有足够的权限来管理此站点的插件。'));
    }</code>
    Copier après la connexion
    Copier après la connexion
    Voici les premières lignes de la fonction

    (en fait redirigé vers add_role): WP_Roles::add_role

    <code>add_action('init', function()
    {
        if (current_user_can('install_plugins'))
        {
            echo '您可以安装插件';
        }
        else
        {
            echo '您不能安装插件';
        }
    });</code>
    Copier après la connexion
    Copier après la connexion
    Si nous ajoutons un nouveau rôle, la fonction

    s'exécute une fois et ne fait plus rien. add_role

    Ensuite, supposons que nous voulons ajouter des autorisations à notre rôle nouvellement créé:

    <code>add_action('init', function()   
    {
        $user = get_user_by('slug', 'admin');
        if ($user->has_cap('install_plugins'))
        {
            echo '管理员可以安装插件';
        }
        else
        {
            echo '管理员不能安装插件';
        }
    });</code>
    Copier après la connexion
    Copier après la connexion
    La fonction

    dans WordPress 4.2.2 est la suivante: WP_Role::add_cap()

    <code>add_action('admin_init', function()
    {
        $roles = get_editable_roles();
        var_dump($roles);
    });</code>
    Copier après la connexion
    Copier après la connexion
    Il met à jour l'objet

    , mais nous pouvons également voir que la base de données sera mise à jour chaque fois que notre code s'exécute, même si nos nouvelles autorisations sont déjà enregistrées! $this->roles Cela signifie que si nous nous soucions des performances, tout le code que nous écrivons pour les rôles personnalisés et les autorisations ne devrait pas s'exécuter lorsque chaque page se charge.

    Solution

    Il existe plusieurs façons d'éviter ces problèmes de base de données.

    Activer avec le plug-in

    WordPress permet aux auteurs du plugin d'utiliser la fonction

    pour déclencher du code lorsque le plugin est activé dans le backend.

    Créons un exemple de plugin: register_activation_hook()

    Ce code ne s'exécutera qu'une seule fois lorsque le plugin est activé sur le site Web.

    <code>add_action('init', function()
    {
        $role = get_role('administrator');
        var_dump($role);
    });
    
    // 这将打印:
    // WP_Role 对象
    // (
    //     [name] => administrator
    //     [capabilities] => Array
    //         (
    //             [switch_themes] => 1
    //             [edit_themes] => 1
    //             [activate_plugins] => 1
    //             [edit_plugins] => 1
    //             [...]</code>
    Copier après la connexion
    Copier après la connexion
    Maintenant, nous devons nous rappeler que cette solution dépend de l'activation et de la désactivation du plugin.

    Que se passe-t-il si le plugin est déjà en production, ou si la réactivation est omise lorsque la mise à jour est poussée?

    En fait, cette solution repose également sur la base de données et nécessite une étape supplémentaire lors de la poussée du code.

    Base de données WordPress de contournement

    Il existe également une solution non divulguée qui fonctionne bien dans certains cas.

    Regardons le code de base WordPress à la fin, lorsque l'objet

    charge le rôle de la base de données lorsque WordPress démarre:

    WP_Roles WordPress vérifie les variables globales

    avant d'obtenir des données de la base de données.
    <code>add_action('init', function()
    {
        $role = get_role('administrator');
        var_dump($role->has_cap('install_plugins')); // 打印 TRUE
    });</code>
    Copier après la connexion
    Copier après la connexion

    Si défini, WordPress utilisera son contenu et bloquera l'utilisation de la base de données en définissant la variable $wp_user_roles sur false.

    Essayons-le, en gardant seulement un nouveau rôle d'administrateur restreint: $this->use_db

    Lors du chargement du backend, nous pouvons voir qu'il conserve la définition de notre rôle personnalisé:

    Mastering WordPress Roles and Capabilities Cette solution résout le problème de la base de données, mais peut introduire d'autres problèmes:

    • Les plugins utilisant des API natifs peuvent ne pas fonctionner correctement.
    • Nous devons définir manuellement la définition de chaque rôle, même pour le rôle que nous ne voulons pas changer.

    Cependant, cela peut être une solution viable lors de la création d'une application WordPress personnalisée qui nécessite une liste personnalisée de rôles statiques:

    • Les définitions de rôle peuvent être versionnées avec le code.
    • Pusing New Code dans l'environnement mettra automatiquement à jour la définition.
    • Plus besoin de considérer les problèmes de base de données.

    Conclusion

    Dans cet article, je présente un aperçu des rôles et des autorisations d'utilisation dans WordPress.

    Bien que son API complète nous permette de faire presque tout ce que nous voulons, les relations avec les bases de données sont toujours le principal problème.

    Nous devons garder cela à l'esprit lors du développement de nos plugins et de nos thèmes.

    Que pensez-vous de la façon dont WordPress gère les rôles? Dans l'attente de vos commentaires!

    Les questions fréquemment posées sur la maîtrise des rôles et autorisations WordPress

    Quel est le rôle d'utilisateur par défaut dans WordPress? Quelles sont leurs autorisations?

    WordPress a six rôles utilisateur par défaut: super administrateur, administrateur, éditeur, auteur, contributeur et abonné. Chaque rôle a un ensemble spécifique d'autorisations. Par exemple, un super administrateur peut accéder à toutes les fonctionnalités administratives de plusieurs sites. Les administrateurs peuvent effectuer toutes les tâches administratives sur un seul site. Les éditeurs peuvent publier et gérer des publications, y compris ceux des autres utilisateurs. Les auteurs peuvent publier et gérer leurs propres messages. Les contributeurs peuvent écrire et gérer leurs propres messages, mais ils ne peuvent pas être affichés. Les abonnés ne peuvent gérer que leur profil.

    Comment ajouter de nouveaux rôles utilisateur dans WordPress?

    Pour ajouter un nouveau rôle utilisateur dans WordPress, vous pouvez utiliser la fonction add_role(). Cette fonction accepte trois paramètres: rôle, nom d'affichage et tableau d'autorisation. Par exemple, pour ajouter un nouveau rôle appelé "Custom_role" et avoir la permission de lire et de modifier les publications, vous pouvez utiliser le code suivant:

    add_role( 'custom_role', __('自定义角色'), array( 'read' => true, // 可以读取帖子 'edit_posts' => true, // 可以编辑帖子 ) );

    Comment supprimer les rôles utilisateur dans WordPress?

    Pour supprimer un rôle utilisateur dans WordPress, vous pouvez utiliser la fonction remove_role(). Cette fonction accepte un paramètre: rôle. Par exemple, pour supprimer le "Custom_role" précédemment ajouté, vous pouvez utiliser le code suivant:

    remove_role('custom_role');

    Comment ajouter des autorisations aux rôles utilisateur dans WordPress?

    Pour ajouter des autorisations aux rôles utilisateur dans WordPress, vous pouvez utiliser la fonction add_cap(). Cette fonction accepte deux paramètres: l'autorisation et une valeur booléenne indiquant si le rôle a l'autorisation. Par exemple, pour ajouter la permission de "publih_posts" à "Custom_role", vous pouvez utiliser le code suivant:

    $role = get_role('custom_role'); $role->add_cap('publish_posts', true);

    Comment supprimer les autorisations des rôles utilisateur dans WordPress?

    Pour supprimer les autorisations des rôles utilisateur dans WordPress, vous pouvez utiliser la fonction remove_cap(). Cette fonction accepte un paramètre: l'autorisation. Par exemple, pour supprimer l'autorisation "Publish_Posts" de "Custom_role", vous pouvez utiliser le code suivant:

    $role = get_role('custom_role'); $role->remove_cap('publish_posts');

    Comment modifier le rôle d'utilisateur par défaut dans WordPress?

    Pour modifier le rôle d'utilisateur par défaut dans WordPress, accédez à Paramètres & gt; Dans le cadre des nouveaux rôles par défaut de l'utilisateur, sélectionnez le rôle que vous souhaitez définir par défaut dans le menu déroulant.

    Comment attribuer plusieurs rôles aux utilisateurs dans WordPress?

    WordPress ne prend pas en charge l'attribution de plusieurs rôles aux utilisateurs par défaut. Cependant, vous pouvez le faire en utilisant des plugins comme plusieurs rôles. Après avoir installé et activé le plugin, vous pouvez attribuer plusieurs rôles à l'utilisateur à partir de la page de profil de l'utilisateur.

    Comment limiter l'accès au contenu en fonction des rôles utilisateur dans WordPress?

    Pour restreindre l'accès au contenu en fonction des rôles utilisateur dans WordPress, vous pouvez utiliser des plugins comme les membres. Ce plugin vous permet de contrôler les rôles qui peuvent accéder au contenu spécifique sur votre site Web.

    Comment créer des autorisations personnalisées dans WordPress?

    Pour créer des autorisations personnalisées dans WordPress, vous pouvez utiliser la fonction add_cap(). Cette fonction accepte deux paramètres: l'autorisation et une valeur booléenne indiquant si le rôle a l'autorisation. Par exemple, pour ajouter une autorisation personnalisée nommée "Manage_custom" à "Custom_role", vous pouvez utiliser le code suivant:

    $role = get_role('custom_role'); $role->add_cap('manage_custom', true);

    Comment vérifier si un utilisateur dans WordPress a des autorisations spécifiques?

    Pour vérifier si un utilisateur dans WordPress a des autorisations spécifiques, vous pouvez utiliser la fonction current_user_can(). Cette fonction accepte un paramètre: l'autorisation. Par exemple, pour vérifier si l'utilisateur actuel a une autorisation "manage_custom", vous pouvez utiliser le code suivant:

    if (current_user_can('manage_custom')) { // 当前用户具有“manage_custom”权限 }

    Toutes les images conservent leur format et leur emplacement d'origine.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal