Запретить пользователю редактировать информацию своего профиля

20 сент. 2011 г., 17:47:06
Просмотры: 23.7K
Голосов: 12

В настоящее время я разрабатываю интранет и использую плагин Members от Justin Tadlock для управления ролями и возможностями.

Я создал роль HR чтобы позволить сотрудникам отдела кадров создавать и редактировать учетные записи пользователей. Всем сотрудникам, созданным в WP, назначается роль contributor, а некоторым избранным сотрудникам предоставляются роли editor и administrator.

Я хочу запретить сотрудникам входить в систему и изменять информацию своего профиля. Только сотрудники с ролью HR должны иметь возможность редактировать информацию профиля.

0
Все ответы на вопрос 7
0
10

Отличный ответ! Чтобы пойти ещё дальше и помочь тем, кто хочет применить это ко всем пользователям, не являющимся администраторами (например, авторам, редакторам и т.д.)

// ===== Удаляем ссылку на редактирование профиля из админ-панели и бокового меню, а также блокируем доступ к странице профиля, если пользователь не администратор
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( 'Пожалуйста, обратитесь к администратору для изменения данных вашего профиля.' );
    }
    remove_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );
}
add_action( 'admin_init', 'stop_access_profile' );
}
17 мар. 2012 г. 11:40:36
0

Разобрался с этим, потратив немного времени. Вот код, который я использую:

<?php
/*
Plugin Name: Restrict User Editing Own Profile
Plugin URI: http://www.philosophydesign.com
Description: Ограничивает пользователей от редактирования собственной информации в профиле.
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( 'Вам не разрешено изменять информацию в собственном профиле. Пожалуйста, обратитесь к представителю отдела кадров для внесения изменений.' );
    }
}
?>

Приведённый выше код запрещает всем пользователям редактировать свою собственную информацию в профиле, независимо от их роли. Пользователи, у которых есть возможность создавать и редактировать других пользователей, сохраняют эти права, но не могут изменять свой собственный профиль.

21 сент. 2011 г. 16:25:13
0

Решение в виде (MU-)Плагина

Я проверил все предложенные решения и подумал, что можно сделать из этого хороший MU-Плагин. Единственное реальное изменение - это избегание

<?php
! defined( 'ABSPATH' ) AND exit;
/**
 * Plugin Name: Отключение ссылки на страницу профиля
 * Description: Удаляет ссылку на редактирование профиля из панели администратора и бокового меню, а также блокирует доступ к странице профиля, если пользователь не является администратором.
 */
# Version: 2012-09-15.2245

function oxo_stop_access_profile()
{
    // Удаление ссылки в панели администратора
    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_menu_page( 'profile.php' );
    remove_submenu_page( 'users.php', 'profile.php' );

    // Запрет доступа к странице профиля и перенаправление при попытке входа
    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 сент. 2012 г. 23:48:00
1

Все приведенные выше решения используют константу IS_PROFILE_PAGE

if( IS_PROFILE_PAGE === true ) {

Однако, если в WordPress включен режим отладки (debug), это вызовет ошибку "undefined constant" (неопределенная константа). Для исправления:

if( defined('IS_PROFILE_PAGE') && IS_PROFILE_PAGE === true ){
........................
}
24 сент. 2015 г. 22:13:03
Комментарии

Спасибо... работает отлично

Arunjith R S Arunjith R S
7 июл. 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') ) { // Здесь можно указать роли пользователей, которые могут редактировать свои профили.
        remove_menu_page( 'profile.php' );
        remove_submenu_page( 'users.php', 'profile.php' );
        if ( true === IS_PROFILE_PAGE ) {
            wp_die( 'Вам не разрешено изменять информацию в своем профиле. Пожалуйста, обратитесь к сотруднику отдела кадров для внесения изменений.' );
        }
    }
}

Надеюсь, это кому-то поможет.

18 дек. 2018 г. 09:02:23
1

У меня была такая же проблема, и я нашел способ отключить редактирование для всех пользователей, не являющихся администраторами. Вот как это выглядит:

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('Вам не разрешено редактировать свой профиль.');
            }
        });
        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 мар. 2023 г. 15:30:06
Комментарии

Зачем добавлять действие admin_init, если вы уже находитесь в обратном вызове admin_init?

Rup Rup
31 мар. 2023 г. 13:17:39
0

Я использую плагин Remove Dashboard Access для этого.

26 июн. 2023 г. 02:44:27