lunes, 30 de mayo de 2011

Hoy en AyudaWordPress.com

Hoy en AyudaWordPress.com

Link to Ayuda WordPress

Editores que no puedan crear Administradores

Posted: 30 May 2011 09:20 AM PDT

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!

No hay comentarios:

Publicar un comentario

Seguidores

Archivo del blog