web-dev-qa-db-fra.com

Comment empêcher l'accès à wp-admin pour certains rôles d'utilisateur?

J'ai essayé d'utiliser le plug-in Front End Users, mais cela heurte quelque chose car il empêche l'accès à certaines pages front-end. Je dois donc le configurer manuellement afin que toute personne n'appartenant pas à l'un des deux noms d'utilisateur (ou rôles) ne puisse accéder à wp-admin.

6
Claire

Brancher

Il s’agit essentiellement d’une vérification des capacités de l’utilisateur, suivie d’une redirection dans un appel de sortie. Il redirige ensuite vers le site d'où provient la demande.

<?php
! defined( 'ABSPATH' ) AND exit;
/* Plugin Name: (#66093) »kaiser« Deny Admin-UI access for certain roles */


function wpse66093_no_admin_access()
{
    $redirect = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : home_url( '/' );
    if ( 
        current_user_can( 'USER_ROLE_NAME_HERE' )
        OR current_user_can( '2ND_ROLE_NAME_HERE' )
    )
        exit( wp_redirect( $redirect ) );
}
add_action( 'admin_init', 'wpse66093_no_admin_access', 100 );
14
kaiser

La réponse acceptée mentionne Rôle d'utilisateur mais utilise en fait la fonction pour Capacité de l'utilisateur

Voici la solution pour Rôles d’utilisateur

 function wpse66094_no_admin_access() {
    $redirect = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : home_url( '/' );
    global $current_user;
    $user_roles = $current_user->roles;
    $user_role = array_shift($user_roles);
    if($user_role === 'YOUR_USER_ROLE_HERE'){
        exit( wp_redirect( $redirect ) );
    }
 }

add_action( 'admin_init', 'wpse66094_no_admin_access', 100 );
2
Akshay Agarwal

Basé sur la réponse fournie par @kaiser (merci btw), ceci est mon code de travail, juste dans tous les cas, quelqu'un en a besoin. Il est placé dans le fichier functions.php.

La condition utilisée est, si l'utilisateur ne peut pas manage_options ou edit_posts.

function wpse66093_no_admin_access() {
    $redirect = home_url( '/' );
    if ( ! ( current_user_can( 'manage_options' ) || current_user_can( 'edit_posts' ) ) )
        exit( wp_redirect( $redirect ) );
}
add_action( 'admin_init', 'wpse66093_no_admin_access', 100 );
2
Carlos B

Avec la réponse de @ kaiser, j'ai constaté que vous deviez utiliser le lien admin_menu sur admin_init car il se déclenche avant le contrôle! User_can_access_admin_page () dans wp-admin/includes/menu.php, sinon si l'utilisateur n'a pas accès en lecture à tableau de bord, ils obtiennent simplement le message "Vous ne disposez pas des autorisations suffisantes pour accéder à cette page". page plutôt que d'être redirigé.

Si vous supprimez la fonctionnalité read du rôle, l'utilisateur ne pourra pas accéder au tableau de bord. Ils obtiendront l'erreur suivante:

Vous ne disposez pas des autorisations suffisantes pour accéder à cette page d’administrateur.

Motif: l'utilisateur actuel ne dispose pas de la fonctionnalité "lecture" nécessaire pour accéder à l'élément de menu "Tableau de bord".

Réf.: https://codex.wordpress.org/Roles_and_Capabilities#read

0
MarcGuay