¿Cómo restringir el acceso al panel de control solo a los administradores?

17

¿Cómo restringiríamos el acceso al área de administración de WP a todos los usuarios excepto a los administradores?
Los usuarios de nuestro sitio tienen sus propias páginas de perfil que realizan todas las funciones que necesitan.

Por lo tanto, el administrador debe estar fuera del alcance de todos, excepto los administradores.

¿Cómo hacer eso?

    
pregunta Robin I Knight 05.03.2011 - 16:15

8 respuestas

19

Podemos enganchar a la acción admin_init y verificar si el usuario es un administrador al usar la función current_user_can() para ver si el usuario actual puede manage_options , que es algo que solo un administrador puede hacer.

Este código, cuando se pegue en el archivo functions.php, mostrará un mensaje cuando alguien que no sea administrador intente acceder al panel:

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 lo prefiere, puede brindar una mejor experiencia de usuario al redirigir al usuario a la página de inicio (la verificación $_SERVER['PHP_SELF'] es para asegurarse de que no redirigamos en una solicitud 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 desea redirigir al usuario a su página de perfil, reemplace home_url() en el código anterior con el enlace.

    
respondido por el shea 27.12.2012 - 11:17
9

Podrías escribir un complemento y enlazarlo a admin_init .

El códice en realidad da un ejemplo con la característica que está buscando.

enlace

    
respondido por el Wietse Venema 05.03.2011 - 21:13
8

Algunas de las respuestas dadas pueden estar bien en la mayoría de las situaciones, pero creo que ninguna de ellas garantiza hacer exactamente lo que se solicita porque ninguna de las respuestas verifica los roles de los usuarios, verifican que las capacidades y las capacidades se pueden asignar y eliminar de los formularios. Entonces, para dar una respuesta exacta, se deben verificar los roles de los usuarios, no las 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();
      }

 }

Si desea verificar que el usuario tiene la capacidad de "administrar opciones", puede hacerlo. De hecho, es la mejor opción en la mayoría de los casos. Aunque esta capacidad está asociada de forma predeterminada a los usuarios administradores, la capacidad puede eliminarse de la función de administrador o puede asignarse a otras funciones de usuario. Es por eso que, en la mayoría de los casos, verificar lo que el usuario puede o no puede hacer es mejor que verificar la función del usuario. Por lo tanto, en la mayoría de los casos, verificar las capacidades debería ser la forma elegida, pero debe tener este concepto claro y elegir la mejor opción para su situación y 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();
      }

 }
    
respondido por el cybmeta 27.03.2014 - 10:57
3

Pruebe el complemento Adminimize .
Puedes bloquear las cosas bastante bien con eso.

También puede intentar configurar el acceso hasta through htaccess file

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

Coloque estas líneas en su 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 );
    
respondido por el Junaid Munir 27.12.2012 - 07:55
0

Intente esto, nunca a través de errores frente a un usuario final. Contra un buen UX. Este código los redirige a Inicio.

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

Yo usaría WP Frontend y lo configuraré para todos los administradores que esperan.

    
respondido por el Benny 06.03.2011 - 06:21

Lea otras preguntas en las etiquetas