Rezolvarea erorii "Nu aveți suficiente permisiuni pentru a accesa această pagină" în WordPress

21 ian. 2013, 20:00:33
Vizualizări: 14.7K
Voturi: 6

Am o instalație WordPress multisite folosind versiunea 3.5. Site-ul principal și câteva alte bloguri din rețea funcționează corect. Totuși, dacă înregistrez un utilizator și un site nou, acel utilizator primește eroarea "Nu aveți suficiente permisiuni pentru a accesa această pagină" de fiecare dată când încearcă să acceseze panoul de administrare al site-ului. Partea publică a site-ului funcționează corespunzător.

Când verific utilizatorul în interfața de administrare a rețelei, acesta apare ca administrator al acelui site. Dacă adaug administratorul rețelei la site, pot accesa zona de administrare.

Am încercat soluțiile obișnuite: dezactivarea și eliminarea tuturor plugin-urilor, activarea temei Twenty Twelve și reinstalarea nucleului WordPress. Niciuna dintre acestea nu funcționează. Cum pot rezolva această problemă?

0
Toate răspunsurile la întrebare 5
3
10

Am petrecut câteva ore din sâmbătă mea căutând această eroare. Nu am putut găsi nicăieri pe internet un ghid care să descrie soluția mea finală. Iată soluția mea.

În nucleul WP, eroarea "Nu aveți permisiuni suficiente pentru a accesa această pagină." este generată la sfârșitul fișierului /wp-admin/includes/menu.php. Un grep în directoarele plugin-urilor mele a arătat, de asemenea, că mai multe plugin-uri pot genera această eroare.

Faceți o copie de rezervă a fișierului menu.php și înlocuiți codul din interiorul blocului if de pe liniile 224-227 (în versiunea 3.5) cu următoarele:

if ( !user_can_access_admin_page() ) {
   $a = array(
       'Pagini Fără Acces' => $_wp_menu_nopriv,
       'Informații Utilizator' => $current_user,
       'Roluri' => $wp_roles->get_names(),
   );
   $s = sprintf("\n<br /><pre>%s</pre>", print_r($a, true));
   do_action('admin_page_access_denied');
   wp_die( __('Nu aveți permisiuni suficiente pentru a accesa această pagină.'.$s) );
}

NU lăsați acest cod activ pe site-ul dvs. decât dacă sunteți în proces de depanare! Înlocuiți-l cu copia de rezervă a menu.php dacă trebuie să vă îndepărtați pentru un timp.

Încercați să accesați din nou panoul de administrare. Această pagină de eroare vă va spune câteva lucruri:

  1. Dacă primiți ieșire suplimentară pe pagina de eșec, aceasta vă spune că eșecul este generat de nucleul WP. În cazul meu, așa a fost. Dacă nu primiți ieșire suplimentară, știți că trebuie să începeți să căutați plugin-ul care provoacă eroarea.
  2. Orice pagină din tabloul Pagini Fără Acces setată la 1 nu este accesibilă utilizatorului. În cazul meu, toate paginile erau setate la 1.
  3. În Informații Utilizator, verificați dacă utilizatorul are rolurile și capabilitățile corecte. În cazul meu, utilizatorul avea un rol de 10 și capabilitățile pe care ar trebui să le aibă ca administrator.
  4. În Roluri veți vedea o listă de roluri definite pentru site. În cazul meu, nu aveam roluri definite. Aici era problema mea.

În cazul meu, am putut naviga în baza mea de date în phpMyAdmin și să caut intrarea [WPDB_PREFIX]_[SITENO]_user_roles în tabela [WPDB_PREFIX]_[SITENO]_options. Schimbasem WPDB_PREFIX-ul meu, dar un plugin crease un rol de utilizator personalizat și îl scrisese cu prefixul implicit wp_. Am putut copia intrarea de pe un site funcțional pe site-ul care nu funcționa. Imediat ce am făcut acest lucru, administratorul a putut accesa imediat site-ul.

Instalarea mea a fost complicată în plus pentru că foloseam plugin-ul șabloane noi pentru bloguri, iar site-ul meu șablon avea și el baza de date coruptă în același mod.

Sper că acest lucru vă ajută.

21 ian. 2013 20:00:33
Comentarii

Excelentă soluție! Crezi că dacă ai fi făcut un search/replace pe prefixul defect ar fi rezolvat problema? P.S. - ar trebui să le trimiți o grămadă de reproșuri acelor developeri - sau cel puțin o mustrare fermă :)

akTed akTed
21 ian. 2013 21:33:19

Dacă aș fi știut de la început care este cauza principală a problemei, da, aș fi putut face asta. Problema mea a fost că după 2 ore de "Google-FU" din partea mea, tot ce am găsit au fost variații ale sfatului "dezactivează toate pluginurile". Voi actualiza acest lucru dacă reușesc să identific vinovatul.

cpilko cpilko
21 ian. 2013 21:41:13

Mulțumesc, m-a ajutat.

Alyas Alyas
20 aug. 2020 21:46:01
0

În timp ce migram de la o instalație multisite, problema a fost cauzată de faptul că rolurile sunt denumite în funcție de numele tabelelor. Așadar, am rezolvat problema când am redenumit opțiunea wp_7_user_roles în wp_user_roles.

2 feb. 2016 16:54:42
0

După ce am încercat câteva soluții, inclusiv gestionarea capabilităților - nimic nu părea să funcționeze. Am verificat din nou dimensiunea tabelei wp_usermeta de pe mediul live comparativ cu cea de pe localhost și am descoperit că încărcarea a fost întreruptă și lipseau unele valori. Am golit tabelul și am reîncărcat întregul conținut al wp_usermeta. WordPress a funcționat imediat după reîncărcare. - Sper că acest lucru va economisi timpul cuiva.

11 nov. 2014 21:54:07
1

Am avut probleme și eu cu asta.

Ceea ce voiam eu era să dau unui utilizator drepturi de Admin, dar să elimin anumite meniuri din bara laterală a administrării din backend.

Am eliminat AAM pentru că dădea probleme de permisiuni și am folosit în schimb Menu Editor Pro. Totul funcționează perfect.

Desigur, aceasta nu este cea mai sigură metodă, deoarece încă permite accesul la paginile de administrare ascunse prin tastarea manuală a URL-urilor, dar clientul meu nu ar ști cum să ajungă acolo, așa că această soluție funcționează.

23 nov. 2014 01:44:00
Comentarii

Aceasta nu abordează cu adevărat problema, dar din moment ce ai început deja să împărtășești cunoștințe, poate dorești să încerci să ajuți pe cineva cu o întrebare mai recentă (deoarece aceasta este destul de veche) :)

kaiser kaiser
23 nov. 2014 02:35:57
0

Problema de permisiuni se referă la următoarele tabele.

Tabelul [prefix]_usermeta

Rândurile cu coloana meta_key ar trebui să reflecte prefixul după cum urmează.

[prefix]_capabilities
[prefix]_user_level

Tabelul [prefix]_options

Singurul rând cu coloana option_name ar trebui să reflecte prefixul după cum urmează.

[prefix]_user_roles
6 iul. 2021 12:39:01