¿Plugin para eliminar elementos del menú de administración según el rol de usuario?

30 ene 2011, 02:19:58
Vistas: 29.2K
Votos: 6

He buscado exhaustivamente un plugin que pueda eliminar/ocultar elementos del menú de administración, incluyendo tipos de contenido personalizados y taxonomías, basado en el rol del usuario.

Todos los que he probado solo realizan una ocultación global, no basada en el rol del usuario. Otros más complejos como adminize no muestran tipos de contenido personalizados ni taxonomías.

¿Tengo que escribir mi propia función o hay algún plugin simple que esté pasando por alto?

1
Comentarios

Prueba este plugin: Ocultar Paneles de Administración)

User User
31 may 2011 20:39:10
Todas las respuestas a la pregunta 4
2

Actualización:

Al leer nuevamente la respuesta de Mike, me hizo pensar que puedes agregar una nueva capacidad a un rol y usarla como condición para la eliminación, así:

   // Primero agrega la capacidad a tu rol de esta manera
   // Obtén el objeto del rol "administrador"
   $role = get_role( 'administrator' );

   // Agrega "see_all_menus" a este objeto de rol
   $role->add_cap( 'see_all_menus' );

   // Luego elimina los elementos del menú basándote en eso
   function remove_those_menu_items( $menu_order ){
            global $menu;
            // Verifica usando la nueva capacidad con current_user_can
            if ( !current_user_can( 'see_all_menus' ) {
             foreach ( $menu as $mkey => $m ) {
                //Nombre del tipo de post personalizado "portfolio"
                $key = array_search( 'edit.php?post_type=portfolio', $m );
                //Menú de páginas
                $keyB = array_search( 'edit.php?post_type=page', $m );
                //Menú de entradas
                $keyC = array_search( 'edit.php', $m );

                if ( $key || $keyB || $keyC )
                    unset( $menu[$mkey] );
             }
            }
            return $menu_order;
    }

 // Luego simplemente engancha esa función a "menu_order"
        add_filter( 'menu_order', 'remove_those_menu_items' );

Respuesta anterior

Estoy completamente de acuerdo con lo que publicó Mike, pero si no estás listo para programación personalizada, echa un vistazo al plugin Editor de Menú de Administración.

Te permite establecer derechos de acceso por nivel.

30 ene 2011 02:55:26
Comentarios

Intenté esto pero la función de ocultar parece ser una configuración global, es activada/desactivada, sin control por rol de usuario.

Wyck Wyck
30 ene 2011 07:18:21

Ok, nuevo enfoque, actualicé mi respuesta.

Bainternet Bainternet
30 ene 2011 11:49:00
0

Existe un plugin creado específicamente para esta pregunta: Hide Admin Menu. Este plugin puede:

  • Ocultar elementos del menú de administración según el rol del usuario, incluyendo Administrador y roles personalizados
  • También puede ocultar elementos de la barra de administración
  • Permite exportar/importar configuraciones para usar en otros sitios

Otra ventaja de este plugin es que es intuitivo y fácil de usar.

28 ago 2012 18:26:33
1

Hola @Wyck:

Puedo entender perfectamente tus necesidades; he tenido clientes que pidieron lo mismo. Sin embargo, desafortunadamente WordPress vincula las páginas del menú de administración (es decir, secciones del menú) y las subpáginas del menú (es decir, elementos del menú) a capacidades, no a roles.

No obstante, no sería demasiado difícil escribir código para un plugin que te permita asignar opciones de menús de administración a roles en su lugar; tu script establecería que la capacidad requerida para todas las opciones del menú sea una nueva capacidad 'not-allowed' y luego tu código asignaría selectivamente la capacidad predeterminada 'read' a cada opción del menú donde el rol del usuario actual tenga la capacidad definida.

La pregunta más importante entonces sería ¿cómo representar el mapeo de roles de usuario a opciones del menú? Imagino que requeriría una interfaz de usuario de administración bastante elaborada. Claro que si solo quieres codificar un array que defina qué roles pueden ver qué, sería bastante fácil...

30 ene 2011 02:38:34
Comentarios

Gracias Mike, tal vez sea una idea para un plugin si el tiempo lo permite, pero por ahora creo que haré algo simple y codificaré un array directamente, lo curioso es que publiqué esto en el hilo de funciones aquí hace unas semanas.

Wyck Wyck
30 ene 2011 07:23:37
0

Esto mantendrá solo un par de elementos del menú para los no administradores. La versión de @Bainternet utiliza add_cap, lo cual debería hacerse solo una vez, durante la activación del tema o plugin.

add_action('admin_menu', function () {
    if (current_user_can('administrator')) {
        return;
    }

    /**
     * Mantener solo elementos específicos del menú y eliminar todos los demás
     */
    global $menu;
    $hMenu = $menu;
    foreach ($hMenu as $nMenuIndex => $hMenuItem) {
        if (in_array($hMenuItem[2], array(
                                         'index.php',
                                         'edit.php?post_type=product',
                                    ))
        ) {
            continue;
        }
        unset($menu[$nMenuIndex]);
    }
}
19 jun 2013 19:32:34