jueves, 18 de agosto de 2011

Members, fantástico plugin para administrar a los miembros de tu blog


Hace tiempo que recomiendo el uso de Members, un fantástico plugin, para gestionar adecuadamente las capacidades y roles de WordPress, pero hay ocasiones en que no es perfecto, tiene sus matices, me explico …
Es bastante corriente modificar, una vez instalado, algún perfil de usuario (siempre estamos hablando de sitios multiusuario) para que, a su vez, pueda agregar otros usuarios. La idea es montar una estructura de colaboradores en la que alguien, normalmente el Editor, no solo revise el contenido creado por usuarios con perfil de Colaborador y Autor, sino que también pueda hacer de "responsable de recursos humanos" y añadir, modificar y borrar perfiles de usuario y sus capacidades.

Pues bien, con Members podemos hacer todo esto pero hay una pega, y es que cuando asignamos a un perfil de usuario la capacidad de crear y/o modificar usuarios también puede crear y/o modificar usuarios con perfil de Administrador, con el peligro que ello supone, sino revisa la tabla de Perfiles y Capacidades de WordPress.

Afortunadamente, todo tiene solución, así que si este es tu caso (el mío si lo es pues gestiono una red de blogs con múltiples perfiles de usuarios), solo tienes que hacer esto:

  1. Instalas y activas Members
  2. Eliges (o creas) un perfil de usuario al que le añadirás las capacidades de crear, modificar, borrar, cambiar perfiles y usuarios
    members new user1 members new user2
  3. Añades este código al fichero functions.php de tu tema activo:

    class JPB_User_Caps {
      // Add our filters
      function JPB_User_Caps(){
        add_filter( 'editable_roles', array(&$this, 'editable_roles'));
        add_filter( 'map_meta_cap', array(&$this, 'map_meta_cap'),10,4);
      }
      // Remove 'Administrator' from the list of roles if the current user is not an admin
      function editable_roles( $roles ){
        if( isset( $roles['administrator'] ) && !current_user_can('administrator') ){
          unset( $roles['administrator']);
        }
        return $roles;
      }
      // If someone is trying to edit or delete and admin and that user isn't an admin, don't allow it
      function map_meta_cap( $caps, $cap, $user_id, $args ){
        switch( $cap ){
            case 'edit_user':
            case 'remove_user':
            case 'promote_user':
                if( isset($args[0]) && $args[0] == $user_id )
                    break;
                elseif( !isset($args[0]) )
                    $caps[] = 'do_not_allow';
                $other = new WP_User( absint($args[0]) );
                if( $other->has_cap( 'administrator' ) ){
                    if(!current_user_can('administrator')){
                        $caps[] = 'do_not_allow';
                    }
                }
                break;
            case 'delete_user':
            case 'delete_users':
                if( !isset($args[0]) )
                    break;
                $other = new WP_User( absint($args[0]) );
                if( $other->has_cap( 'administrator' ) ){
                    if(!current_user_can('administrator')){
                        $caps[] = 'do_not_allow';
                    }
                }
                break;
            default:
                break;
        }
        return $caps;
      }
    }
    $jpb_user_caps = new JPB_User_Caps();
  4. Guardas los cambios y ¡Ya está!, ahora el nuevo perfil de usuario podrá crear y modificar perfiles pero no podrá crear administradores ni modificar sus perfiles a no ser que, a su vez, sea administrador
¡Que lo disfrutes!

By Portal de Peru with 1 comment

1 comentarios:

Muchas Gracias Portal de Perú ! !

Tengo instalado este plugin en mi Blog y nunca había caído en la posibilidad que me borrasen...

He agregado el código que comentas y funciona 100% ;) Ahora a los demás Usuarios no les aparece el enlace de "Editar admin"

Un Saludo desde Barcelona ! !

PC-SERVEIS, Diseño Web
http://www.pc-serveis.es

Publicar un comentario

    • Popular
    • Categories
    • Archives