Como restringir o acesso do painel apenas aos administradores?

17

Como poderíamos restringir o acesso à área administrativa do WP a todos os usuários, exceto os administradores?
Os usuários em nosso site têm suas próprias páginas de perfil que fazem todas as funções de que precisam.

O administrador deve estar fora dos limites para todos, exceto para administradores.

Como fazer isso?

    
por Robin I Knight 05.03.2011 / 16:15

8 respostas

19

Podemos ligar à ação admin_init e verificar se o usuário é um administrador usando a função current_user_can() para ver se o usuário atual pode manage_options , que é algo que apenas um administrador pode fazer.

Este código, quando colado em seu arquivo functions.php, exibirá uma mensagem quando um não-administrador tentar acessar o painel:

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 );

Se preferir, você pode fornecer uma melhor experiência ao usuário redirecionando o usuário para a página inicial (a $_SERVER['PHP_SELF'] é para garantir que não redirecionaremos uma solicitação 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 );

Se você quiser redirecionar o usuário para a página de perfil dele, substitua home_url() no código acima pelo link.

    
por shea 27.12.2012 / 11:17
9

Você pode escrever um plug-in e conectá-lo a admin_init .

O códice realmente dá um exemplo com o recurso que você está procurando.

enlace

    
por Wietse Venema 05.03.2011 / 21:13
8

Algumas das respostas dadas podem estar bem na maioria das situações, mas acho que nenhuma delas garante fazer exatamente o que foi perguntado porque nenhuma das respostas verifica as funções do usuário, elas verificam capacidades e capacidades que podem ser atribuídas e removidas. Então, para dar uma resposta exata, as funções do usuário devem ser verificadas, não as capacidades:

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();
      }

 }

Se você quiser verificar se o usuário tem o recurso "manage_options", você pode. Na verdade, é a melhor opção na maioria dos casos. Embora esse recurso seja associado por padrão aos usuários administradores, o recurso pode ser removido da função admin ou pode ser atribuído a outras funções de usuário. É por isso que, na maioria dos casos, verificar o que o usuário pode ou não fazer é melhor do que verificar a função do usuário. Assim, na maioria dos casos, a verificação de recursos deve ser a forma escolhida, mas você tem esse conceito claro e escolhe a melhor opção para sua situação e propósito:

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();
      }

 }
    
por cybmeta 27.03.2014 / 10:57
3

Experimente o plugin Adminimize .
Você pode bloquear as coisas muito bem com isso.

Você também pode tentar configurar o acesso atrav� do ficheiro htaccess

    
por 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);
    
por Gabi 10.05.2012 / 15:21
0

Coloque estas linhas no seu 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 );
    
por Junaid Munir 27.12.2012 / 07:55
0

Tente isso, nunca através de erros no rosto de um usuário final. Contra um bom UX. Este código redireciona-os para o Google Home.

    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;
}
}
    
por Ahmad Awais 11.06.2014 / 16:07
-1

Eu usaria o WP Frontend e defini-lo para todos esperarem administradores.

    
por Benny 06.03.2011 / 06:21