Устранение ошибки "У вас недостаточно прав для доступа к этой странице"

21 янв. 2013 г., 20:00:33
Просмотры: 14.7K
Голосов: 6

У меня установлена Multisite сеть на WordPress 3.5. Основной сайт и несколько других блогов в сети работают нормально. Однако, если я регистрирую нового пользователя и сайт, этот пользователь получает ошибку "У вас недостаточно прав для доступа к этой странице" при попытке зайти в админку своего сайта. Фронтенд сайта работает корректно.

Когда я смотрю на пользователя в интерфейсе Сетевого администрирования, он отображается как администратор этого сайта. Если я добавляю Сетевого администратора на сайт, то могу получить доступ к админке.

Я пробовал стандартные рекомендации: отключал и удалял все плагины, активировал тему Twenty Twelve и переустанавливал ядро WordPress. Ничего не помогло. Как это можно исправить?

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

Я потратил несколько часов в субботу на поиск этой ошибки. Нигде в сети я не смог найти руководство, которое описывало бы моё окончательное решение. Вот оно.

В ядре WordPress ошибка "У вас недостаточно прав для доступа к этой странице" генерируется в конце файла /wp-admin/includes/menu.php. Поиск grep в моих директориях с плагинами также показал, что несколько плагинов тоже могут генерировать эту ошибку.

Сделайте резервную копию menu.php и замените код внутри блока if на строках 224-227 (в версии 3.5) следующим:

if ( !user_can_access_admin_page() ) {
   $a = array(
       'Страницы без доступа' => $_wp_menu_nopriv,
       'Информация о пользователе' => $current_user,
       'Роли' => $wp_roles->get_names(),
   );
   $s = sprintf("\n<br /><pre>%s</pre>", print_r($a, true));
   do_action('admin_page_access_denied');
   wp_die( __('У вас недостаточно прав для доступа к этой странице.'.$s) );
}

НЕ ОСТАВЛЯЙТЕ этот код на сайте, если вы не занимаетесь активной отладкой! Восстановите резервную копию menu.php, если вам нужно отойти на время.

Попробуйте снова зайти в админку. Эта страница с ошибкой покажет вам несколько вещей:

  1. Если вы видите дополнительный вывод на странице с ошибкой, значит, проблема генерируется ядром WordPress. В моём случае так и было. Если дополнительного вывода нет, значит, нужно искать плагин, вызывающий ошибку.
  2. Любая страница в массиве Страницы без доступа со значением 1 недоступна для пользователя. В моём случае все страницы были помечены как 1.
  3. В разделе Информация о пользователе проверьте, есть ли у пользователя правильные роли и права. В моём случае у пользователя была роль 10 и права администратора.
  4. В разделе Роли вы увидите список определённых ролей для сайта. В моём случае роли не были определены. Здесь и была моя проблема.

В моём случае я смог просмотреть базу данных в phpMyAdmin и найти запись [WPDB_PREFIX]_[SITENO]_user_roles в таблице [WPDB_PREFIX]_[SITENO]_options. Я изменил свой WPDB_PREFIX, но какой-то плагин создал пользовательскую роль и записал её с префиксом по умолчанию wp_. Я скопировал запись с работающего сайта на неработающий. Как только я это сделал, доступ в админку сразу заработал.

Моя установка дополнительно осложнялась тем, что я использовал плагин шаблонов новых блогов, и база данных моего шаблонного сайта тоже была повреждена таким же образом.

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

21 янв. 2013 г. 20:00:33
Комментарии

Отличное решение! Как думаешь, если бы ты сделал поиск/замену ошибочного префикса, это решило бы проблему? P.S. - стоит послать этим разработчикам кучу презрения - или хотя бы строгий выговор :)

akTed akTed
21 янв. 2013 г. 21:33:19

Если бы я с самого начала знал первопричину проблемы, то да, мог бы так сделать. Моя проблема была в том, что после 2 часов моего лучшего "гугл-фу" все, что я смог найти - это вариации совета "отключите все плагины". Я обновлю этот ответ, если смогу точно определить виновника.

cpilko cpilko
21 янв. 2013 г. 21:41:13

Спасибо, это помогло мне.

Alyas Alyas
20 авг. 2020 г. 21:46:01
0

При переносе с мультисайтовой установки проблема возникла из-за того, что названия ролей зависят от имён таблиц. Я решил свою проблему, переименовав опцию wp_7_user_roles в wp_user_roles.

2 февр. 2016 г. 16:54:42
0

После перебора нескольких решений, включая работу с возможностями (capabilities), ничего не помогло. В конечном итоге я перепроверил размер таблицы wp_usermeta на рабочем сервере и локальном хосте и обнаружил, что загрузка была обрезана и отсутствовали некоторые значения. Я очистил таблицу и повторно загрузил всю usermeta заново. WordPress заработал сразу после загрузки. Надеюсь, это сэкономит кому-то время.

11 нояб. 2014 г. 21:54:07
1

У меня тоже были проблемы с этим.

Я хотел дать одному пользователю права Администратора, но убрать определенные пункты меню из боковой панели админки.

Я удалил AAM, потому что он вызывал проблемы с правами, и вместо него использовал Menu Editor Pro. Теперь всё работает идеально.

Конечно, это не самый безопасный способ, так как он все равно позволяет получить доступ к скрытым страницам админки путем ручного ввода URL, но мой клиент все равно не знал бы, как туда попасть, поэтому такой вариант сработал.

23 нояб. 2014 г. 01:44:00
Комментарии

Это не совсем решает проблему, но раз уж вы начали делиться знаниями, возможно, вы захотите помочь кому-то с более свежим вопросом (так как этот уже довольно старый) :)

kaiser kaiser
23 нояб. 2014 г. 02:35:57
0

Проблема с правами доступа связана со следующими таблицами.

Таблица [prefix]_usermeta

Строки с колонкой meta_key должны содержать префикс следующим образом.

[prefix]_capabilities
[prefix]_user_level

Таблица [prefix]_options

Единственная строка с колонкой option_name должна содержать префикс следующим образом.

[prefix]_user_roles
6 июл. 2021 г. 12:39:01