Interzicerea utilizatorilor să-și editeze informațiile din profil

20 sept. 2011, 17:47:06
Vizualizări: 23.7K
Voturi: 12

În prezent dezvolt o rețea intranet și folosesc plugin-ul Members creat de Justin Tadlock pentru a controla rolurile și permisiunile.

Am creat un rol HR pentru a permite personalului de Resurse Umane să creeze și să editeze conturi de utilizator. Toți angajații creați în WP primesc rolul de contributor, iar câțiva membri selectați primesc rolurile de editor și administrator.

Ceea ce doresc este să împiedic angajații să se conecteze și să-și modifice propriile informații din profil. Doar personalul cu rolul HR ar trebui să poată edita informațiile din profil.

0
Toate răspunsurile la întrebare 7
0
10

răspuns excelent, pentru a merge un pas mai departe și pentru cei care doresc să aplice acest lucru pentru toți utilizatorii non-administratori (de ex. colaboratori, editori etc.)

// ===== elimină link-ul de editare profil din bara de administrare și meniul lateral și blochează pagina de profil dacă nu e administrator
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( 'Vă rugăm contactați administratorul pentru modificarea informațiilor de profil.' );
    }
    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

Am rezolvat problema după ceva timp. Iată codul pe care îl folosesc:

<?php
/*
Plugin Name: Restrict User Editing Own Profile
Plugin URI: http://www.philosophydesign.com
Description: Restricționează utilizatorii să își editeze propriile informații de profil.
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( 'Nu aveți permisiunea să vă modificați propriile informații de profil. Vă rugăm să contactați un membru al departamentului de Resurse Umane pentru a vă modifica informațiile de profil.' );
    }
}
?>

Codul de mai sus împiedică orice utilizator să își editeze propriile informații de profil, indiferent de rolul pe care îl deține. Persoanele care au dreptul să creeze și să editeze utilizatori pot continua să facă acest lucru, dar nu își pot modifica propriile informații.

21 sept. 2011 16:25:13
0

Soluție ca (MU-)Plugin

Am verificat toate soluțiile oferite și m-am gândit să creez un MU-Plugin din ele. Singura modificare reală este că evită

<?php
! defined( 'ABSPATH' ) AND exit;
/**
 * Plugin Name: Dezactivează link-ul către pagina de profil
 * Description: Elimină link-ul de editare a profilului din bara de administrare și din meniul lateral și blochează accesul la pagina de profil dacă utilizatorul nu este administrator.
 */
# Versiune: 2012-09-15.2245

function oxo_stop_access_profile()
{
    // Elimină link-ul din bara de administrare
    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' );

    // Elimină elementele din (sub)meniu
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );

    // Blochează accesul la pagina de profil și redirecționează la încercare
    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

Toate soluțiile de mai sus folosesc constanta: IS_PROFILE_PAGE

if( IS_PROFILE_PAGE === true ) {

Dar, dacă debug-ul WordPress este activat, va genera o eroare "undefined constant". Pentru a rezolva:

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

Mulțumesc...funcționează perfect

Arunjith R S Arunjith R S
7 iul. 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') ) { // Puteți adăuga aici rolurile de utilizator care pot edita profilurile lor.
        remove_menu_page( 'profile.php' );
        remove_submenu_page( 'users.php', 'profile.php' );
        if ( true === IS_PROFILE_PAGE ) {
            wp_die( 'Nu aveți permisiunea să vă modificați informațiile de profil. Vă rugăm să contactați un membru al departamentului de Resurse Umane pentru a vă actualiza informațiile de profil.' );
        }
    }
}

Sper că acest lucru va ajuta pe cineva.

18 dec. 2018 09:02:23
1

Am avut aceeași problemă și am găsit o soluție pentru a dezactiva editarea pentru toți utilizatorii non-administratori. Iată cum arată codul:

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('Nu aveți permisiunea să editați profilul.');
            }
        });
        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
Comentarii

De ce să adaugi o acțiune admin_init când ești deja într-un callback admin_init?

Rup Rup
31 mar. 2023 13:17:39
0

Eu folosesc pluginul Remove Dashboard Access pentru asta.

26 iun. 2023 02:44:27