Evitar que los usuarios editen su propia información de perfil

20 sept 2011, 17:47:06
Vistas: 23.7K
Votos: 12

Actualmente estoy desarrollando una intranet y estoy usando el plugin Members de Justin Tadlock para controlar roles y capacidades.

He creado un rol HR para permitir al personal de Recursos Humanos crear y editar cuentas de usuario. Todo el personal creado en WP recibe el rol de contributor con algunos miembros seleccionados del personal que reciben roles de editor y administrator.

Lo que quiero es evitar que el personal inicie sesión y cambie su propia información de perfil. Solo el personal con el rol HR debería poder editar la información del perfil.

0
Todas las respuestas a la pregunta 7
0
10

excelente respuesta, para llevar esto un paso más allá y para cualquiera que busque aplicarlo a todos los usuarios que no son administradores (por ejemplo, contribuidores, editores, etc.)

// ===== eliminar el enlace de edición de perfil de la barra de administración y del menú lateral, y bloquear la página de perfil si no es un administrador
if( !current_user_can('activate_plugins') ) {
function mytheme_admin_bar_render() {
    global $wp_admin_bar;
    $wp_admin_bar->remove_menu('edit-profile', 'user-actions');
}
add_action( 'wp_before_admin_bar_render', 'mytheme_admin_bar_render' );

function stop_access_profile() {
    if(IS_PROFILE_PAGE === true) {
        wp_die( 'Por favor contacta a tu administrador para modificar la información de tu perfil.' );
    }
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );
}
add_action( 'admin_init', 'stop_access_profile' );
}
17 mar 2012 11:40:36
0

Lo resolví con un poco de tiempo. Aquí está el código que estoy usando:

<?php
/*
Plugin Name: Restringir Edición de Perfil Propio
Plugin URI: http://www.philosophydesign.com
Description: Restringe a los usuarios de editar su propia información de perfil.
Author: Scott Cariss
Version: 0.1
Author URI: http://www.philosophydesign.com/scott-cariss.html
*/

add_action( 'admin_menu', 'detener_acceso_perfil' );
function detener_acceso_perfil() {
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );
    if(IS_PROFILE_PAGE === true) {
        wp_die( 'No tienes permiso para cambiar tu propia información de perfil. Por favor contacta a un miembro de RRHH para que actualicen tu información de perfil.' );
    }
}
?>

El código anterior impide que cualquier persona edite su propia información de perfil, sin importar quién sea. Las personas que tienen la capacidad de crear y editar usuarios aún pueden hacerlo, pero no pueden modificar su propio perfil.

21 sept 2011 16:25:13
0

Solución como Plugin (MU)

Revisé todas las soluciones proporcionadas y pensé que podría crear un buen MU-Plugin a partir de ellas. El único cambio real es que evita

<?php
! defined( 'ABSPATH' ) AND exit;
/**
 * Plugin Name: Deshabilitar enlace a página de perfil
 * Description: Elimina el enlace de edición de perfil de la barra de administración y del menú lateral, y bloquea la página de perfil si el usuario no es administrador.
 */
# Versión: 2012-09-15.2245

function oxo_stop_access_profile()
{
    // Eliminar enlace de la barra de administración
    if ( 
        'wp_before_admin_bar_render' === current_filter()
        AND ! current_user_can( 'manage_options' )
    )
        return $GLOBALS['wp_admin_bar']->remove_menu( 'edit-profile', 'user-actions' );

    // Eliminar elementos del menú (y submenú)
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );

    // Denegar acceso a la página de perfil y redirigir al intentar acceder
    if ( 
        defined( 'IS_PROFILE_PAGE' )
        AND IS_PROFILE_PAGE
        AND ! current_user_can( 'manage_options' )
        )
    {
        wp_redirect( admin_url() );
        exit;
    }
}
add_action( 'wp_before_admin_bar_render', 'oxo_stop_access_profile' );
add_action( 'admin_menu', 'oxo_stop_access_profile' );
15 sept 2012 23:48:00
1

Todas las soluciones anteriores utilizan la constante: IS_PROFILE_PAGE

if( IS_PROFILE_PAGE === true ) {

Pero, si el modo de depuración de WordPress está activado, mostrará un error de "constante no definida". Para solucionarlo:

if( defined('IS_PROFILE_PAGE') && IS_PROFILE_PAGE === true ){
........................
}
24 sept 2015 22:13:03
Comentarios

Gracias... funciona perfectamente

Arunjith R S Arunjith R S
7 jul 2020 13:10:17
0
add_action( 'admin_menu', 'prefix_disable_profile_access' );
function prefix_disable_profile_access() {
    if( ! current_user_can('editor') || ! current_user_can('administrator') ) { // Puedes añadir los roles de usuario que pueden editar sus perfiles aquí.
        remove_menu_page( 'profile.php' );
        remove_submenu_page( 'users.php', 'profile.php' );
        if ( true === IS_PROFILE_PAGE ) {
            wp_die( 'No tienes permiso para cambiar la información de tu perfil. Por favor, contacta con un miembro de RRHH para modificar la información de tu perfil.' );
        }
    }
}

Espero que esto le sirva a alguien.

18 dic 2018 09:02:23
1

Tuve el mismo problema y encontré una forma de deshabilitar la edición para todos los usuarios que no son administradores. Así es como se ve:

add_action('admin_init', 'disable_profile_edit_for_non_admins');

function disable_profile_edit_for_non_admins() {
    $user = wp_get_current_user();
    if (in_array('subscriber', $user->roles)) {
        add_action('init', function() {
            remove_action('admin_color_scheme_picker', 'admin_color_scheme_picker');
        });
        add_action('admin_init', function() {
            if (isset($_GET['action']) && $_GET['action'] == 'profile') {
                wp_die('No tienes permiso para editar tu perfil.');
            }
        });
        add_filter('user_has_cap', function($allcaps, $cap, $args) {
            if ($cap[0] == 'edit_user' && $cap[1] == $args[0]->ID) {
                $allcaps['edit_user'] = false;
            }
            return $allcaps;
        }, 10, 3);
    }
}
27 mar 2023 15:30:06
Comentarios

¿Por qué agregar una acción admin_init cuando ya estás dentro de una devolución de llamada admin_init?

Rup Rup
31 mar 2023 13:17:39
0

Utilizo el plugin Remove Dashboard Access para esto.

26 jun 2023 02:44:27