web-dev-qa-db-fra.com

Comment restreindre l'accès au tableau de bord aux administrateurs uniquement?

Comment limiterions-nous l'accès à la zone WP admin à tous les utilisateurs, à l'exception des administrateurs?
Les utilisateurs de notre site ont leurs propres pages de profil qui remplissent toutes les fonctions dont ils ont besoin.

Donc, admin devrait être hors limites pour tous sauf les administrateurs.

Comment faire ça?

19
Robin I Knight

Nous pouvons nous connecter à l'action admin_init et vérifier si l'utilisateur est administrateur en utilisant la fonction current_user_can() pour voir si l'utilisateur actuel peut manage_options, ce que seul un administrateur peut faire.

Ce code, une fois collé dans votre fichier functions.php, affichera un message lorsqu'un non-administrateur tente d'accéder au tableau de bord:

function wpse_11244_restrict_admin() {

    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __( 'You are not allowed to access this part of the site' ) );
    }
}

add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

Si vous préférez, vous pouvez améliorer l'expérience utilisateur en le redirigeant vers la page d'accueil:

function wpse_11244_restrict_admin() {

    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_redirect( home_url() );
        exit;
    }
}

add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

Si vous souhaitez rediriger l'utilisateur vers sa page de profil, remplacez home_url() dans le code ci-dessus par le lien.

19
shea

Certaines des réponses fournies peuvent convenir dans la plupart des situations, mais je pense qu'aucune d'entre elles ne garantit exactement ce qui est demandé, car aucune des réponses ne vérifie les rôles des utilisateurs, elles vérifient que les capacités et les capacités peuvent être attribuées et supprimées. Donc, pour donner une réponse exacte, les rôles des utilisateurs doivent être vérifiés, pas les capacités:

add_action( 'admin_init', 'allow_admin_area_to_admins_only');
function allow_admin_area_to_admins_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls
            return;
      }

      $user = wp_get_current_user();

      if( empty( $user ) || !in_array( "administrator", (array) $user->roles ) ) {
           //Redirect to main page if no user or if the user has no "administrator" role assigned
           wp_redirect( get_site_url( ) );
           exit();
      }

 }

Si vous voulez vérifier que l'utilisateur a la capacité "manage_options", vous pouvez. En fait, c'est la meilleure option dans la plupart des cas. Bien que cette fonctionnalité soit associée par défaut aux utilisateurs administrateurs, elle peut être supprimée du rôle admin ou attribuée à d'autres rôles utilisateur. C'est pourquoi, dans la plupart des cas, il est préférable de vérifier ce que l'utilisateur peut ou ne peut pas faire, plutôt que de vérifier le rôle de l'utilisateur. Ainsi, dans la plupart des cas, la vérification des capacités devrait être la méthode choisie, mais vous devez définir clairement ce concept et choisir l'option qui convient le mieux à votre situation et à votre objectif:

add_action( 'admin_init', 'admin_area_for_manage_options_only');
function admin_area_for_manage_options_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls
            return;
      }


      if( ! current_user_can( "manage_options" ) ) {
           //Redirect to main page if the user has no "manage_options" capability
           wp_redirect( get_site_url( ) );
           exit();
      }

 }
9
cybmeta

Vous pouvez écrire un plugin et vous connecter à admin_init.

Le codex donne en fait un exemple avec la fonctionnalité que vous recherchez.

http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#Example:_Access_control

9
Wietse Venema

Essayez le Adminimize plugin.
Cela vous permet de bien verrouiller les choses.

Vous pouvez également essayer de configurer l'accès haut via le fichier htaccess

3
goofydg1
function wpse_11244_restrict_admin() {
    if (!current_user_can('update_core')) {
        wp_die(__('You are not allowed to access this part of the site'));
    }
}

add_action('admin_init', 'wpse_11244_restrict_admin', 1);
2
Gabi

Essayez ceci, jamais par des erreurs face à un utilisateur final. Contre un bon UX. Ce code les redirige vers la maison.

    add_action( 'init', 'blockusers_init' );
function blockusers_init() {
if ( is_admin() && ! current_user_can( 'administrator' ) &&
! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
wp_redirect( home_url() );
exit;
}
}
0
Ahmad Awais

Mettez ces lignes dans votre functions.php

function baw_no_admin_access()
{
 if( !current_user_can( 'administrator' ) ) {
     wp_redirect( home_url() );
     die();
  }
}
add_action( 'admin_init', 'baw_no_admin_access', 1 );
0
Junaid Munir