Impedire agli utenti di modificare le proprie informazioni del profilo

20 set 2011, 17:47:06
Visualizzazioni: 23.7K
Voti: 12

Sto sviluppando una intranet e sto utilizzando il plugin Members di Justin Tadlock per controllare ruoli e autorizzazioni.

Ho creato un ruolo HR per consentire al personale delle Risorse Umane di creare e modificare gli account utente. A tutto il personale creato in WP viene assegnato il ruolo di contributor con alcuni membri selezionati del personale a cui vengono assegnati i ruoli di editor e administrator.

Quello che voglio è impedire al personale di accedere e modificare le proprie informazioni del profilo. Solo il personale con ruolo HR dovrebbe essere in grado di modificare le informazioni del profilo.

0
Tutte le risposte alla domanda 7
0
10

ottima risposta, per andare ancora oltre e per chiunque desideri applicare questo a tutti gli utenti non amministratori (ad esempio collaboratori, editor, ecc.)

// ===== rimuovi il link di modifica profilo dalla barra di amministrazione e dal menu laterale e disabilita la pagina del profilo se non si è amministratori
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( 'Si prega di contattare l\'amministratore per modificare le informazioni del profilo.' );
    }
    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

Ho risolto con un po' di tempo. Ecco il codice che sto utilizzando:

<?php
/*
Plugin Name: Restrict User Editing Own Profile
Plugin URI: http://www.philosophydesign.com
Description: Limita gli utenti dalla modifica delle proprie informazioni del profilo.
Author: Scott Cariss
Version: 0.1
Author URI: http://www.philosophydesign.com/scott-cariss.html
*/

add_action( 'admin_menu', 'stop_access_profile' );
function stop_access_profile() {
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );
    if(IS_PROFILE_PAGE === true) {
        wp_die( 'Non sei autorizzato a modificare le informazioni del tuo profilo. Contatta un membro delle Risorse Umane per modificare le tue informazioni.' );
    }
}
?>

Il codice sopra impedisce a chiunque di modificare le proprie informazioni del profilo, indipendentemente da chi siano. Le persone che hanno la capacità di creare e modificare gli utenti possono ancora farlo, ma non possono alterare il proprio profilo.

21 set 2011 16:25:13
0

Soluzione come Plugin (MU-Plugin)

Ho verificato tutte le soluzioni fornite e ho pensato di poter creare un bel MU-Plugin a partire da esse. L'unica modifica sostanziale è che evita

<?php
! defined( 'ABSPATH' ) AND exit;
/**
 * Plugin Name: Disabilita link pagina profilo
 * Description: Rimuovi il link di modifica profilo dalla barra di amministrazione e dal menu laterale e blocca l'accesso alla pagina profilo se l'utente non è un amministratore.
 */
# Version: 2012-09-15.2245

function oxo_stop_access_profile()
{
    // Rimuovi il link dalla AdminBar
    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' );

    // Rimuovi le voci (sotto)menu
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );

    // Nega l'accesso alla pagina profilo e reindirizza in caso di tentativo
    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 set 2012 23:48:00
1

Tutte le soluzioni sopra utilizzano la costante: IS_PROFILE_PAGE

if( IS_PROFILE_PAGE === true ) {

Ma, se il debug di WordPress è impostato su true, genererà un errore "costante non definita". Per risolverlo:

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

Grazie...funziona perfettamente

Arunjith R S Arunjith R S
7 lug 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') ) { // Puoi aggiungere qui i ruoli utente che possono modificare i propri profili.
        remove_menu_page( 'profile.php' );
        remove_submenu_page( 'users.php', 'profile.php' );
        if ( true === IS_PROFILE_PAGE ) {
            wp_die( 'Non sei autorizzato a modificare le informazioni del tuo profilo. Contatta un membro delle Risorse Umane per modificare le informazioni del tuo profilo.' );
        }
    }
}

Spero che questo aiuti qualcuno.

18 dic 2018 09:02:23
1

Ho avuto lo stesso problema e ho trovato un modo per disabilitare la modifica a tutti gli utenti non amministratori. Ecco come si presenta:

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('Non sei autorizzato a modificare il tuo profilo.');
            }
        });
        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
Commenti

Perché aggiungere un'azione admin_init quando sei già all'interno di un callback admin_init?

Rup Rup
31 mar 2023 13:17:39
0

Utilizzo il plugin Remove Dashboard Access per questo.

26 giu 2023 02:44:27