web-dev-qa-db-fra.com

Empêcher l'utilisateur de modifier ses propres informations de profil

Je développe actuellement un intranet et j'utilise le plug-in Membres de Justin Tadlock pour contrôler les rôles et les fonctionnalités.

J'ai créé un rôle HR pour permettre au personnel des ressources humaines de créer et de modifier des comptes d'utilisateurs. Tous les membres du personnel créés dans WP se voient attribuer le rôle contributor avec un nombre restreint de membres du personnel dotés de rôles editor et administrator.

Ce que je veux, c'est empêcher les employés de se connecter et de modifier leurs propres informations de profil. Seul le personnel du rôle HR devrait pouvoir modifier les informations de profil.

7
Brady

Ça a fonctionné avec un peu de temps. Voici le code que j'utilise:

<?php
/*
Plugin Name: Restrict User Editing Own Profile
Plugin URI: http://www.philosophydesign.com
Description: Restricts users from editing their own profile information.
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( 'You are not permitted to change your own profile information. Please contact a member of HR to have your profile information changed.' );
    }
}
?>

Le code ci-dessus empêche quiconque de modifier ses propres informations de profil malgré son identité. Les personnes qui ont la possibilité de créer et de modifier des utilisations peuvent toujours le faire, mais ne peuvent pas modifier les leurs.

5
Brady

excellente réponse: aller plus loin et à l'intention de tous ceux qui souhaitent appliquer cette démarche à tous les utilisateurs non administrateurs (contributeurs, éditeurs, etc.)

// ===== remove edit profile link from admin bar and side menu and kill profile page if not an admin
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( 'Please contact your administrator to have your profile information changed.' );
    }
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );
}
add_action( 'admin_init', 'stop_access_profile' );
}
7
sirG

Solution en tant que plugin (MU)

J'ai vérifié toutes les solutions fournies et j'ai pensé que je pourrais en faire un Nice MU-Plugin. Le seul changement réel est qu'il évite

<?php
! defined( 'ABSPATH' ) AND exit;
/**
 * Plugin Name: Disable profile page link
 * Description: Remove edit profile link from admin bar and side menu and kill profile page if user isn't an administrator.
 */
# Version: 2012-09-15.2245

function oxo_stop_access_profile()
{
    // Remove AdminBar Link
    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' );

    // Remove (sub)menu items
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );

    // Deny access to the profile page and redirect upon try
    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' );
5
kaiser

Toutes les solutions ci-dessus utilisent la constante: IS_PROFILE_PAGE

if( IS_PROFILE_PAGE === true ) {

Mais, si wordpress debug est défini sur true, une erreur "constante indéfinie" sera générée. Réparer :

if( defined('IS_PROFILE_PAGE') && IS_PROFILE_PAGE === true ){
........................
}
2
sudip
add_action( 'admin_menu', 'prefix_disable_profile_access' );
function prefix_disable_profile_access() {
    if( ! current_user_can('editor') || ! current_user_can('administrator') ) { // You can add the user roles who can edit their profiles here.
        remove_menu_page( 'profile.php' );
        remove_submenu_page( 'users.php', 'profile.php' );
        if ( true === IS_PROFILE_PAGE ) {
            wp_die( 'You are not permitted to change your own profile information. Please contact a member of HR to have your profile information changed.' );
        }
    }
}

J'espère que cela aidera quelqu'un.

0
Adiyya Tadikamalla