Benutzer dürfen ihre eigenen Profilinformationen nicht bearbeiten

8

Ich entwickle derzeit ein Intranet und verwende das Mitglieder-Plugin von Justin Tadlock, um Rollen und Funktionen zu steuern.

Ich habe eine HRRolle erstellt, mit der Mitarbeiter der Personalabteilung Benutzerkonten erstellen und bearbeiten können. Alle in WP erstellten Mitarbeiter erhalten die contributorRolle mit einigen ausgewählten Mitarbeitern editorund administratorRollen.

Ich möchte verhindern, dass sich Mitarbeiter anmelden und ihre eigenen Profilinformationen ändern. Nur Mitarbeiter der HRRolle sollten Profilinformationen bearbeiten können.

Scott
quelle

Antworten:

8

Tolle Antwort, um noch einen Schritt weiter zu gehen und für alle, die dies auf alle Nicht-Administrator-Benutzer (z. B. Mitwirkende, Redakteure usw.) anwenden möchten.

// ===== 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' );
}
sirG
quelle
5

Hat es mit ein bisschen Zeit geschafft. Hier ist der Code, den ich verwende:

<?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.' );
    }
}
?>

Der obige Code hindert jeden daran, seine eigenen Profilinformationen zu bearbeiten, unabhängig davon, wer er ist. Personen, die die Möglichkeit haben, Verwendungen zu erstellen und zu bearbeiten, können dies weiterhin tun, aber ihre eigenen nicht ändern.

Scott
quelle
5

Lösung als (MU-) Plugin

Ich habe alle bereitgestellten Lösungen überprüft und dachte, ich könnte daraus ein schönes MU-Plugin machen. Die einzige wirkliche Änderung ist, dass es vermeidet

<?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' );
Kaiser
quelle
2

Alle oben genannten Lösungen verwenden die Konstante: IS_PROFILE_PAGE

if( IS_PROFILE_PAGE === true ) {

Wenn das WordPress-Debug jedoch auf true gesetzt ist, wird der Fehler "undefinierte Konstante" ausgegeben. Etwas reparieren :

if( defined('IS_PROFILE_PAGE') && IS_PROFILE_PAGE === true ){
........................
}
Sudip
quelle
0
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.' );
        }
    }
}

Hoffe das hilft jemandem.

Adiyya Tadikamalla
quelle