Устранение ошибки "У вас недостаточно прав для доступа к этой странице"
У меня установлена Multisite сеть на WordPress 3.5. Основной сайт и несколько других блогов в сети работают нормально. Однако, если я регистрирую нового пользователя и сайт, этот пользователь получает ошибку "У вас недостаточно прав для доступа к этой странице" при попытке зайти в админку своего сайта. Фронтенд сайта работает корректно.
Когда я смотрю на пользователя в интерфейсе Сетевого администрирования, он отображается как администратор этого сайта. Если я добавляю Сетевого администратора на сайт, то могу получить доступ к админке.
Я пробовал стандартные рекомендации: отключал и удалял все плагины, активировал тему Twenty Twelve и переустанавливал ядро WordPress. Ничего не помогло. Как это можно исправить?

Я потратил несколько часов в субботу на поиск этой ошибки. Нигде в сети я не смог найти руководство, которое описывало бы моё окончательное решение. Вот оно.
В ядре 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
, если вам нужно отойти на время.
Попробуйте снова зайти в админку. Эта страница с ошибкой покажет вам несколько вещей:
- Если вы видите дополнительный вывод на странице с ошибкой, значит, проблема генерируется ядром WordPress. В моём случае так и было. Если дополнительного вывода нет, значит, нужно искать плагин, вызывающий ошибку.
- Любая страница в массиве
Страницы без доступа
со значением1
недоступна для пользователя. В моём случае все страницы были помечены как1
. - В разделе
Информация о пользователе
проверьте, есть ли у пользователя правильные роли и права. В моём случае у пользователя была роль10
и права администратора. - В разделе
Роли
вы увидите список определённых ролей для сайта. В моём случае роли не были определены. Здесь и была моя проблема.
В моём случае я смог просмотреть базу данных в phpMyAdmin и найти запись [WPDB_PREFIX]_[SITENO]_user_roles
в таблице [WPDB_PREFIX]_[SITENO]_options
. Я изменил свой WPDB_PREFIX
, но какой-то плагин создал пользовательскую роль и записал её с префиксом по умолчанию wp_
. Я скопировал запись с работающего сайта на неработающий. Как только я это сделал, доступ в админку сразу заработал.
Моя установка дополнительно осложнялась тем, что я использовал плагин шаблонов новых блогов, и база данных моего шаблонного сайта тоже была повреждена таким же образом.
Надеюсь, это поможет.

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

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

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

У меня тоже были проблемы с этим.
Я хотел дать одному пользователю права Администратора, но убрать определенные пункты меню из боковой панели админки.
Я удалил AAM, потому что он вызывал проблемы с правами, и вместо него использовал Menu Editor Pro. Теперь всё работает идеально.
Конечно, это не самый безопасный способ, так как он все равно позволяет получить доступ к скрытым страницам админки путем ручного ввода URL, но мой клиент все равно не знал бы, как туда попасть, поэтому такой вариант сработал.

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

Проблема с правами доступа связана со следующими таблицами.
Таблица [prefix]_usermeta
Строки с колонкой meta_key
должны содержать префикс следующим образом.
[prefix]_capabilities
[prefix]_user_level
Таблица [prefix]_options
Единственная строка с колонкой option_name
должна содержать префикс следующим образом.
[prefix]_user_roles
