WordPress.org

Si votre plugin permet aux utilisateurs de soumettre des données – que ce soit du côté administrateur ou du côté public – il doit vérifier les capacités des utilisateurs.

Rôles et capacités des utilisateurs #User Roles and Capabilities

L’étape la plus importante dans la création d’une couche de sécurité efficace est d’avoir un système de permission des utilisateurs en place. WordPress le fournit sous la forme de rôles et de capacités d’utilisateur.

Chaque utilisateur connecté à WordPress se voit automatiquement attribuer des capacités d’utilisateur spécifiques en fonction de son rôle d’utilisateur.

Les rôles d’utilisateur sont juste une façon fantaisiste de dire à quel groupe l’utilisateur appartient. Chaque groupe a un ensemble spécifique de capacités prédéfinies.

Par exemple, l’utilisateur principal de votre site web aura le rôle d’Utilisateur d’un Administrateur tandis que d’autres utilisateurs pourraient avoir des rôles comme Éditeur ou Auteur. Vous pourriez avoir plus d’un utilisateur affecté à un rôle, c’est-à-dire qu’il pourrait y avoir deux Administrateurs pour un site Web.

Les capacités des utilisateurs sont les autorisations spécifiques que vous attribuez à chaque utilisateur ou à un rôle d’Utilisateur.

Par exemple, les Administrateurs ont la capacité « manage_options » qui leur permet d’afficher, de modifier et d’enregistrer les options du site Web. Les éditeurs, en revanche, n’ont pas cette capacité, ce qui les empêchera d’interagir avec les options.

Ces capacités sont ensuite vérifiées à différents points de l’Admin. En fonction des capacités attribuées à un rôle ; des menus, des fonctionnalités et d’autres aspects de l’expérience WordPress peuvent être ajoutés ou supprimés.

Lorsque vous construisez un plugin, assurez-vous d’exécuter votre code uniquement lorsque l’utilisateur actuel a les capacités nécessaires.

Hiérarchie #Hierarchie

Plus le rôle de l’utilisateur est élevé, plus il a de capacités. Chaque rôle d’utilisateur hérite des rôles précédents dans la hiérarchie.

Par exemple, l' »Administrateur », qui est le rôle d’utilisateur le plus élevé sur une installation de site unique, hérite des rôles suivants et de leurs capacités : « Abonné », « Contributeur », « Auteur » et « Rédacteur ».

Top

Exemples #Exemples

Top

Pas de restrictions #Pas de restrictions

L’exemple ci-dessous crée un lien sur le frontend qui donne la possibilité de mettre à la poubelle les articles. Comme ce code ne vérifie pas les capacités de l’utilisateur, il permet à n’importe quel visiteur du site de mettre à la poubelle des articles !

/** * Generate a Delete link based on the homepage url. * * @param string $content Existing content. * * @return string|null */function wporg_generate_delete_link( $content ) {// Run only for single post page.if ( is_single() && in_the_loop() && is_main_query() ) {// Add query arguments: action, post.$url = add_query_arg(, home_url());return $content . ' <a href="' . esc_url( $url ) . '">' . esc_html__( 'Delete Post', 'wporg' ) . '</a>';}return null;}/** * Request handler */function wporg_delete_post() {if ( isset( $_GET ) && 'wporg_frontend_delete' === $_GET ) {// Verify we have a post id.$post_id = ( isset( $_GET ) ) ? ( $_GET ) : ( null );// Verify there is a post with such a number.$post = get_post( (int) $post_id );if ( empty( $post ) ) {return;}// Delete the post.wp_trash_post( $post_id );// Redirect to admin page.$redirect = admin_url( 'edit.php' );wp_safe_redirect( $redirect );// We are done.die;}}/** * Add the delete link to the end of the post content. */add_filter( 'the_content', 'wporg_generate_delete_link' );/** * Register our request handler with the init hook. */add_action( 'init', 'wporg_delete_post' );

Agrandir le code source completRéduire le code source complet

Haut

Restreint à une capacité spécifique #Restreint à une capacité spécifique

L’exemple ci-dessus permet à tout visiteur du site de cliquer sur le lien « Supprimer » et de mettre à la poubelle le post. Cependant, nous voulons que seuls les éditeurs et les personnes de niveau supérieur puissent cliquer sur le lien « Supprimer ».

Pour y parvenir, nous vérifierons que l’utilisateur actuel possède la capacité edit_others_posts, que seuls les rédacteurs ou les personnes de niveau supérieur auraient :

/** * Generate a Delete link based on the homepage url. * * @param string $content Existing content. * * @return string|null */function wporg_generate_delete_link( $content ) {// Run only for single post page.if ( is_single() && in_the_loop() && is_main_query() ) {// Add query arguments: action, post.$url = add_query_arg(, home_url());return $content . ' <a href="' . esc_url( $url ) . '">' . esc_html__( 'Delete Post', 'wporg' ) . '</a>';}return null;}/** * Request handler */function wporg_delete_post() {if ( isset( $_GET ) && 'wporg_frontend_delete' === $_GET ) {// Verify we have a post id.$post_id = ( isset( $_GET ) ) ? ( $_GET ) : ( null );// Verify there is a post with such a number.$post = get_post( (int) $post_id );if ( empty( $post ) ) {return;}// Delete the post.wp_trash_post( $post_id );// Redirect to admin page.$redirect = admin_url( 'edit.php' );wp_safe_redirect( $redirect );// We are done.die;}}if ( current_user_can( 'edit_others_posts' ) ) {/** * Add the delete link to the end of the post content. */add_filter( 'the_content', 'wporg_generate_delete_link' );/** * Register our request handler with the init hook. */add_action( 'init', 'wporg_delete_post' );}

Expansion du code source completRéduction du code source complet

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *