Cum să Elimin Abilitatea Altor Utilizatori de a Vizualiza Administratorul în Lista de Utilizatori?

28 feb. 2011, 20:55:27
Vizualizări: 16.3K
Voturi: 15

(Notă moderator: Titlul original era "Elimină Administrator din Meniul de Utilizatori")

Am creat un rol de administrator pentru clienți, care este în esență un Editor cu dreptul de a adăuga/elimina utilizatori. Articolul "Editorul poate crea orice utilizator nou, cu excepția administratorului" a fost excelent în a mă ajuta să prevîn noului meu rol de administrator client să editeze sau să creeze un utilizator cu drepturi de administrator real.

Totuși, ceea ce ar fi ideal ar fi să ascund administratorii de administratorii clienți atunci când aceștia vizualizează utilizatorii. Vreau ca ei să "creadă" că sunt administratorii site-ului lor, dar nu vreau să aibă posibilitatea să vadă măcar rolul/ utilizatorul meu—în esență, ascunzând rolul de "administrator" de ei când sunt în panoul "Utilizatori".

0
Toate răspunsurile la întrebare 4
11
11

Salut @Carlos:

Încearcă să adaugi următoarele în fișierul functions.php al temei tale, sau într-un fișier .php dintr-un plugin pe care îl poți scrie (care funcționează pentru WordPress 3.1.x):

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Nu este administrator, elimină administratorul
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}

Dacă ai WordPress 3.0.x încearcă această variantă (deoarece WordPress nu a adăugat cârligul 'pre_user_query' până la versiunea 3.1):

add_action('pre_user_search','yoursite_pre_user_search');
function yoursite_pre_user_search($user_search) {
  $user = wp_get_current_user();
  if ($user->ID!=1) { // Nu este administrator, elimină administratorul
    global $wpdb;
    $user_search->query_where = str_replace('WHERE 1=1',
      "WHERE 1=1 AND {$wpdb->users}.ID<>1",$user_search->query_where);
  }
}
28 feb. 2011 21:22:22
Comentarii

Aceasta ascunde doar primul utilizator adăugat (care este aproape întotdeauna administratorul)... dar dacă administratorul are un ID diferit de 1, va trebui să modifici interogarea în mod corespunzător. De asemenea, va ascunde doar 1 administrator, nu toți administratorii.

EAMann EAMann
28 feb. 2011 21:50:28

De fapt, am reușit să fac asta să funcționeze doar în versiunea 3.1. Același cod în versiuni mai vechi nu pare să funcționeze (nici măcar 3.04).

Carlos Carlos
1 mar. 2011 01:22:57

@EAMann - Corect, am fost comod. Dacă cineva are nevoie de mai mult, voi investiga.

MikeSchinkel MikeSchinkel
1 mar. 2011 05:33:02

@Carlos - Ai nevoie de versiunea 3.0.x sau versiunea 3.1 este acceptabilă?

MikeSchinkel MikeSchinkel
1 mar. 2011 05:33:21

@Mike—uau, da, dacă ai fi dispus să mă ajuți cu asta ar fi minunat. Am tot încercat fără succes. Pentru nevoile mele, Admin ID 1 funcționează perfect. Apreciez foarte mult.

Carlos Carlos
1 mar. 2011 09:20:10

@Carlos - Pentru clarificare, vrei să spui că ai nevoie de o versiune 3.0.x sau de altceva?

MikeSchinkel MikeSchinkel
1 mar. 2011 19:42:50

@Carlos - Vezi răspunsul meu actualizat.

MikeSchinkel MikeSchinkel
2 mar. 2011 06:54:01

@Mike--funcționează perfect. Mulțumesc mult pentru ajutor.

Carlos Carlos
4 mar. 2011 21:01:51

@Carlos - Mă bucur că am putut ajuta.

MikeSchinkel MikeSchinkel
4 mar. 2011 21:57:21

există vreun plugin care face asta?

ReNiSh AR ReNiSh AR
4 iun. 2014 18:52:46

@ReNiShAR Poate, dar să știu ce pluginuri există nu este expertiza mea. Eu doar știu cum să le construiesc. :) Poate Google știe?

MikeSchinkel MikeSchinkel
7 iun. 2014 06:20:50
Arată celelalte 6 comentarii
1
10

Iată o modificare a răspunsului lui MikeSchinkel care verifică dacă utilizatorul curent are rolul de administrator și, dacă nu, selectează doar utilizatorii care sunt abonați.

add_action('pre_user_query','yoursite_pre_user_query');
function yoursite_pre_user_query($user_search) {
    $user = wp_get_current_user();

    if ( $user->roles[0] != 'administrator' ) { 
        global $wpdb;

        $user_search->query_where = 
        str_replace('WHERE 1=1', 
            "WHERE 1=1 AND {$wpdb->users}.ID IN (
                 SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta 
                    WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}user_level' 
                    AND {$wpdb->usermeta}.meta_value = 0)", 
            $user_search->query_where
        );

    }
}
7 feb. 2012 04:12:38
Comentarii

Doar pentru informație, pentru oricine în viitor care nu este foarte proficient în SQL, cum nu sunt nici eu, dacă doriți să afișați toți utilizatorii care nu sunt administratori (Editori, Autori, Abonați etc.) dar totuși să ascundeți administratorii, puteți modifica această linie: AND {$wpdb->usermeta}.meta_value = 0 și în schimb să setați valoarea meta la < 10 astfel: AND {$wpdb->usermeta}.meta_value < 10) ceea ce va afișa toți utilizatorii și va ascunde toți administratorii de la toți utilizatorii indiferent de nivelul lor.

Howdy_McGee Howdy_McGee
19 aug. 2013 17:26:13
0

Nivelurile de Utilizator sunt învechite, așa că această metodă verifică în schimb capacitățile:

/** Ascunde Administratorul din Lista de Utilizatori **/
function isa_pre_user_query( $user_search ) {
    if ( !current_user_can( 'administrator' ) ) { // Nu este Administrator - Elimină Administratorul
        global $wpdb;

        $user_search->query_where = str_replace(
            'WHERE 1=1', 
            "WHERE 1=1 AND {$wpdb->users}.ID IN (
              SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta 
              WHERE {$wpdb->usermeta}.meta_key = '{$wpdb->prefix}capabilities'
              AND {$wpdb->usermeta}.meta_value NOT LIKE '%administrator%' )", 
            $user_search->query_where
        );
    }
}

add_action( 'pre_user_query', 'isa_pre_user_query' );
14 nov. 2013 19:44:56
2

pre_user_query acțiunea poate fi utilizată pentru a modifica interogarea utilizatorului începând cu WordPress 3.1.0

4 mar. 2013 20:28:38
Comentarii

Ești sigur? Poți cita o sursă? Această acțiune este folosită în versiunea curentă de trunk - vezi wp-includes/user.php, linia 549.

Johannes Pille Johannes Pille
27 sept. 2013 12:48:20

wp_user_query nu funcționează în 3.6.1, însă pre_user_query funcționează. nu știu despre 3.5.x

gwillie gwillie
27 sept. 2013 11:37:55