Cum să restricționezi accesul la panoul de administrare doar pentru Administratori?

5 mar. 2011, 17:15:29
Vizualizări: 27.7K
Voturi: 20

Cum putem restricționa accesul la zona de administrare WordPress pentru toți utilizatorii, cu excepția administratorilor?
Utilizatorii site-ului nostru au propriile pagini de profil care conțin toate funcțiile de care au nevoie.

Așadar, zona de administrare ar trebui să fie inaccesibilă tuturor, cu excepția administratorilor.

Cum putem face acest lucru?

3
Comentarii

Vrei să spui că există pagini pentru utilizatori, accesibile public, care nu necesită accesarea a ceva de la http://yourdomain.com/wp-admin ?

curtismchale curtismchale
5 mar. 2011 17:37:34

Da, exact. Este ceva în neregulă cu asta?

Robin I Knight Robin I Knight
5 mar. 2011 17:42:54

Nu, doar clarificam.

curtismchale curtismchale
6 mar. 2011 04:01:25
Toate răspunsurile la întrebare 8
6
21

Putem folosi acțiunea admin_init și să verificăm dacă utilizatorul este administrator prin funcția current_user_can() pentru a verifica dacă utilizatorul curent poate manage_options, ceea ce poate face doar un administrator.

Acest cod, când este inserat în fișierul functions.php, va afișa un mesaj când un utilizator ne-administrator încearcă să acceseze panoul de administrare:

function wpse_11244_restrict_admin() {

    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __( 'Nu ai permisiunea să accesezi această parte a site-ului' ) );
    }
}

add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

Dacă preferați, puteți oferi o experiență mai bună utilizatorului prin redirecționarea acestuia către pagina principală:

function wpse_11244_restrict_admin() {

    if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
        return;
    }

    if ( ! current_user_can( 'manage_options' ) ) {
        wp_redirect( home_url() );
        exit;
    }
}

add_action( 'admin_init', 'wpse_11244_restrict_admin', 1 );

Dacă doriți să redirecționați utilizatorul către pagina sa de profil, înlocuiți home_url() în codul de mai sus cu link-ul corespunzător.

27 dec. 2012 12:17:19
Comentarii

Acest răspuns nu îndeplinește cerințele întrebării. În primul rând, restricționați accesul la zona de administrare unui utilizator cu capacitatea "manage_options", iar o capacitate poate fi atribuită mai multor roluri, nu doar administratorului. În plus, capacitatea "manage_options" poate fi eliminată de la administrator.

cybmeta cybmeta
11 iun. 2014 17:36:57

@cybmeta verificarea capacității manage_options este metoda acceptată pentru a verifica un utilizator administrator. Chiar și Mark Jaquith confirmă acest lucru

shea shea
12 iun. 2014 01:26:00

Întrebarea se referea exact la verificarea rolului de administrator și cred că este important să-i oferim răspunsul exact și să explicăm când și de ce verificarea capacității poate fi mai bună. Spuneți că manage_options este ceva ce doar "administratorii" pot face, iar asta nu este adevărat, manage_options este o capacitate și poate fi eliminată din rolul de administrator sau atribuită altor roluri de utilizator. Important este să știm ce vrem să facem și să alegem cea mai bună abordare. Vedeți răspunsul meu, explic acest lucru.

cybmeta cybmeta
12 iun. 2014 11:02:44

Domnule, primești un +1! :) Am căutat asta de ore întregi! De asemenea, o mică îmbunătățire. Pentru site-uri unice, verificarea ta este suficientă. Pentru rețele de site-uri, ai putea să înlocuiești manage_options cu manage_network. Această ultimă opțiune ar dezactiva tabloul de bord și pentru "administratorii de site" obișnuiți, dar ar păstra accesul disponibil pentru Super Administratori (Administratorii de rețea).

rkeet rkeet
20 aug. 2014 14:57:33

Principala problemă cu acest răspuns este că intră în conflict cu apelurile ajax. @cybmeta are răspunsul corect mai jos.

RiotAct RiotAct
17 apr. 2019 23:04:19

@RiotAct Sunt destul de sigur că am inclus o verificare pentru AJAX în al doilea exemplu, dar ai dreptate, ar fi trebuit să folosesc metoda mai fiabilă

shea shea
18 apr. 2019 03:33:14
Arată celelalte 1 comentarii
1

Puteți scrie un plugin și să vă conectați la admin_init.

Codex oferă de fapt un exemplu cu funcționalitatea pe care o căutați.

http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init#Example:_Access_control

5 mar. 2011 22:13:18
Comentarii

Acesta nu este un răspuns complet - ar trebui să fie mai mult decât un indiciu și un link

shea shea
8 ian. 2013 06:37:41
1

Unele dintre răspunsurile oferite pot fi bune în majoritatea situațiilor, dar cred că niciunul nu garantează că face exact ceea ce se cere, deoarece niciunul nu verifică rolurile utilizatorilor, ci verifică capabilitățile, iar acestea pot fi atribuite și eliminate din roluri. Prin urmare, pentru a oferi un răspuns exact, trebuie verificate rolurile utilizatorilor, nu capabilitățile:

add_action( 'admin_init', 'allow_admin_area_to_admins_only');
function allow_admin_area_to_admins_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Permite apelurile AJAX
            return;
      }

      $user = wp_get_current_user();

      if( empty( $user ) || !in_array( "administrator", (array) $user->roles ) ) {
           //Redirecționează către pagina principală dacă nu există utilizator sau dacă utilizatorul nu are rolul de "administrator" atribuit
           wp_redirect( get_site_url( ) );
           exit();
      }

 }

Dacă doriți să verificați dacă utilizatorul are capabilitatea "manage_options", puteți face acest lucru. De fapt, aceasta este cea mai bună opțiune în majoritatea cazurilor. Deși această capabilitate este asociată implicit utilizatorilor cu rol de administrator, ea poate fi eliminată din rolul de administrator sau poate fi atribuită altor roluri de utilizatori. De aceea, în majoritatea cazurilor, verificarea a ceea ce utilizatorul poate sau nu poate face este mai bună decât verificarea rolului utilizatorului. Prin urmare, în majoritatea cazurilor, verificarea capabilităților ar trebui să fie metoda aleasă, dar trebuie să aveți acest concept clar și să alegeți cea mai bună opțiune pentru situația și scopul dvs.:

add_action( 'admin_init', 'admin_area_for_manage_options_only');
function admin_area_for_manage_options_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Permite apelurile AJAX
            return;
      }


      if( ! current_user_can( "manage_options" ) ) {
           //Redirecționează către pagina principală dacă utilizatorul nu are capabilitatea "manage_options"
           wp_redirect( get_site_url( ) );
           exit();
      }

 }
27 mar. 2014 11:57:06
Comentarii

Acesta este răspunsul corect. Nu intră în conflict cu apelurile ajax.

RiotAct RiotAct
17 apr. 2019 23:04:42
1

Încearcă pluginul Adminimize.
Poți să blochezi lucrurile destul de bine cu el.

De asemenea, poți încerca să configurezi accesul prin fișierul htaccess

5 mar. 2011 19:38:56
Comentarii

+1 pentru Adminimize. Este un monstru de plugin. Îmbinat cu un plugin de gestionare a rolurilor personalizat, pur și simplu rulează perfect. (Dacă îmi permiteți o părere personală) :::: Ca o ultimă observație: vă rog să oferiți mai multe informații decât doar linkuri, astfel răspunsul devine mai complet.

brasofilo brasofilo
20 oct. 2012 08:02:45
2
function wpse_11244_restrict_admin() {
    if (!current_user_can('update_core')) {
        wp_die(__('Nu ai permisiunea să accesezi această parte a site-ului'));
    }
}

add_action('admin_init', 'wpse_11244_restrict_admin', 1);
10 mai 2012 16:21:30
Comentarii

'administrator' nu este o capabilitate. Funcționează doar pentru a menține compatibilitatea cu versiunile anterioare. Verifică 'update_core' sau alte capabilități de administrator.

fuxia fuxia
10 mai 2012 19:10:34

De asemenea, capabilitățile pot fi atribuite rolurilor, așa că dacă vrei să permiți accesul utilizatorului "administrator", ar trebui să verifici rolurile, nu capabilitățile.

cybmeta cybmeta
11 iun. 2014 17:47:11
1

Pune aceste linii în fișierul tău functions.php

function baw_no_admin_access()
{
 if( !current_user_can( 'administrator' ) ) {
     wp_redirect( home_url() );
     die();
  }
}
add_action( 'admin_init', 'baw_no_admin_access', 1 );
27 dec. 2012 08:55:36
Comentarii

cum a spus @toscho 'administrator' nu este o capabilitate, în schimb folosește capabilități de admin precum 'update_core'

Pierre Pierre
27 dec. 2012 11:33:25
0

Încearcă asta, niciodată nu arunca erori în fața unui utilizator final. Este împotriva unei bune experiențe de utilizare (UX). Acest cod îi redirecționează către pagina de Acasă.

    add_action( 'init', 'blockusers_init' );
function blockusers_init() {
if ( is_admin() && ! current_user_can( 'administrator' ) &&
! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
wp_redirect( home_url() );
exit;
}
}
11 iun. 2014 17:07:17
1
-1

Aș folosi WP Frontend și l-aș seta pentru toți utilizatorii, cu excepția administratorilor.

6 mar. 2011 07:21:15
Comentarii

Te rog să oferi mai multe informații decât doar un link - astfel răspunsul devine mai complet

shea shea
8 ian. 2013 06:42:10