web-dev-qa-db-ja.com

「このページにアクセスするための十分な権限がありません」というエラーのトラブルシューティング

WP 3.5を実行しているマルチサイトインストールがあります。私のメインサイトとネットワーク上の他のいくつかのブログはうまく働きます。ただし、新しいユーザーとサイトを登録すると、そのユーザーには「このページにアクセスするための十分な権限がありません」というメッセージが表示されます。彼らはサイトの管理者パネルにアクセスしようとするたびにエラーが発生しました。サイトのフロントエンドは正しく機能しています。

ネットワーク管理インターフェースでユーザーを見ると、それらはそのサイトの管理者であることがわかります。ネットワーク管理者をサイトに追加すると、管理領域を表示できます。

私はすべてのプラグインを無効にして削除する、Twenty Twelveテーマを有効にする、そしてWPコアを再インストールするという通常の提案を試してみました。これらのどれも動作しません。どうすればこれを修正できますか?

3
cpilko

私はこのエラーを探すために土曜日の数時間を過ごしました。最終的な解決策を説明したガイドがネット上のどこにも見つかりませんでした。これが私の解決策です。

WPコアで、「あなたはこのページにアクセスするための十分な権限を持っていません。」 /wp-admin/includes/menu.phpの最後にエラーが発生します。私のプラグインディレクトリのgrepも、いくつかのプラグインもこのエラーを生成する可能性があることを示しました。

menu.phpのバックアップを作成し、224-227行目のifブロック内のコードを次のように置き換えます。

if ( !user_can_access_admin_page() ) {
   $a = array(
       'Pages No Access' => $_wp_menu_nopriv,
       'User Info' => $current_user,
       'Roles' => $wp_roles->get_names(),
   );
   $s = sprintf("\n<br /><pre>%s</pre>", print_r($a, true));
   do_action('admin_page_access_denied');
   wp_die( __('You do not have sufficient permissions to access this page.'.$s) );
}

あなたが積極的にデバッグしているのでなければ、このコードをあなたのサイトに公開したままにしないでください。 しばらく立ち去る必要がある場合は、これをバックアップのmenu.phpに置き換えてください。

管理者側に再度アクセスしてみてください。このエラーページでは、いくつかのことを説明しています。

  1. 失敗ページに追加の出力がある場合、これは失敗がWPコアによって生成されていることを示しています。私の場合はそうでした。追加の出力がない場合は、エラーの原因となっているプラ​​グインを探し始める必要があることがわかります。
  2. Pages No Accessに設定されている1配列内のページには、ユーザーはアクセスできません。私の場合は、すべてのページが1に設定されていました。
  3. User Infoで、ユーザーに正しい ロールと機能 があるかどうかを確認します。私の場合、ユーザーは10の役割と管理者として持つべき機能を持っていました。
  4. Rolesには、サイトに定義されているロールのリストが表示されます。私の場合、定義された役割はありませんでした。これが私の問題でした。

私の場合は、phpMyAdminでデータベースをブラウズし、[WPDB_PREFIX]_[SITENO]_user_rolesテーブルで[WPDB_PREFIX]_[SITENO]_optionsエントリを探すことができました。私は私のWPDB_PREFIXを変更しました、しかし、いくつかのプラグインはカスタムユーザロールを作成して、そしてデフォルトのwp_接頭辞でこれを書きました。エントリを作業サイトから非作業サイトにコピーすることができました。私がやったようにすぐに管理者はすぐにサイトにアクセスすることができました。

新しいブログテンプレート pluginを使用していたため、インストールがさらに複雑になりました。また、テンプレートサイトでも同じようにデータベースが破損していました。

これが役に立つことを願っています。

6
cpilko

私がマルチサイトインストールから移行していたとき、問題は役割がテーブル名に基づいて命名されているという事実に起因していました。そのため、オプションwp_7_user_rolesをwp_user_rolesに指定すると、問題が解決しました。

1
Marc Queralt

これにも問題がありました。

私が欲しかったのは、1人のユーザーにAdminを与え、バックエンドの管理サイドバーから特定のメニューを削除することでした。

AAMを削除したのは、アクセス権の問題があるためです。代わりにMenu Editor Proを使用しました。すべてが完璧に機能します。

もちろん、これは最も安全な方法ではありません。それでも、手動でURLを入力して非表示の管理ページにアクセスすることはできますが、クライアントはどうやってアクセスするかわからないので、これでうまくいきます。

0
user2945884

機能を含むいくつかの解決策を通過した後、何も機能していないようでした。私はついにライブのwp_usermeta対localhostのwp_usermetaのサイズを再確認しました、そしてアップロードが切り刻まれて、いくつかの値が抜けていたことがわかりました。テーブルを空にして、usermeta全体を再アップロードしました。 Wordpressはアップロード後すぐに機能しました。 - これが誰かの時間を節約することを願っています。

0
Gadgetroid