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

17

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

Donc, l'administrateur devrait être interdit à tous, sauf aux administrateurs.

Comment faire cela?

    
posée Robin I Knight 05.03.2011 - 16:15

8 réponses

19

Nous pouvons nous associer à l'action admin_init pour vérifier si l'utilisateur est un 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, lorsqu'il est collé dans votre fichier functions.php, affiche un message lorsqu'un non-administrateur tente d'accéder au tableau de bord:

function wpse_11244_restrict_admin() {
    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 fournir une meilleure expérience utilisateur en le redirigeant vers la page d'accueil (le contrôle $_SERVER['PHP_SELF'] sert à s'assurer que nous ne redirigeons pas une demande AJAX):

function wpse_11244_restrict_admin() {
    if ( ! current_user_can( 'manage_options' )  && $_SERVER['PHP_SELF'] != '/wp-admin/admin-ajax.php' ) {
        wp_redirect( home_url() );
    }
}
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.

    
réponse donnée shea 27.12.2012 - 11:17
9

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

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

enlace

    
réponse donnée Wietse Venema 05.03.2011 - 21:13
8

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 fonctionnalités et les fonctionnalité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 souhaitez vérifier que l'utilisateur dispose de la fonctionnalité "manage_options", vous le 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();
      }

 }
    
réponse donnée cybmeta 27.03.2014 - 10:57
3

Essayez le plug-in Adminimize .
Vous pouvez très bien verrouiller les choses avec ça.

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

    
réponse donnée goofydg1 05.03.2011 - 18:38
2
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);
    
réponse donnée Gabi 10.05.2012 - 15:21
0

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 );
    
réponse donnée Junaid Munir 27.12.2012 - 07:55
0

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

    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;
}
}
    
réponse donnée Ahmad Awais 11.06.2014 - 16:07
-1

Je voudrais utiliser WP Frontend et le configurer pour que tout le monde attende des administrateurs.

    
réponse donnée Benny 06.03.2011 - 06:21

Lire d'autres questions sur les étiquettes