WordPressは、どのユーザーアカウントにどの権限を与えるかを権限グループという概念で定めています。開発者はこの権限を細かにカスタマイズできます。この記事では権限のカスタマイズで必要な最低限の知識をまとめてお送りします。
基礎知識については「ユーザーの種類と権限 / Roles and Capabilities」を参照してください。
WordPressは、どのユーザーアカウントにどの権限を与えるかを権限グループという概念で定めています。開発者はこの権限を細かにカスタマイズできます。この記事では権限のカスタマイズで必要な最低限の知識をまとめてお送りします。
基礎知識については「ユーザーの種類と権限 / Roles and Capabilities」を参照してください。
デフォルトで用意されている権限グループは次の6種類です。特権管理者と購読者はあまり使わないかもしれません。編集者、投稿者、寄稿者は違いがややこしいですが、誰の記事を編集・公開できるかの視点で見るとわかりやすいです。
これら以外の独自の権限グループは add_role()
関数や remove_role()
関数を使って作成または削除ができます。
全部で73個もの権限があります。あまりにも数が多いので、この記事ではお仕事でカスタマイズ要望の多いユーザーとプラグインに関する権限を、例を交えてみていきたいと思います。
全リストはドキュメント(権限・権限グループテーブル)をご覧ください。
例:編集者にユーザー管理権限を付与したい
デフォルトの編集者にはユーザー管理権限がありません。管理者以上のユーザーのみがユーザーの追加・削除・変更・編集を行えます。編集者もユーザー管理をしたい場合、ユーザーに関する権限を編集者に付与すれば良いです。
ユーザーに関する権限は6つあります。
例:編集者にプラグイン権限を付与したい
デフォルトの編集者にはプラグインに関する権限がありません。管理者以上のユーザーのみがプラグインの追加・有効化・更新・削除・編集を行えます。編集者もプラグイン管理をしたい場合、プラグインに関する権限を編集者に付与すれば良いです。
さて、権限の種類を見てきたところで、実際に権限を付与してみましょう。 functions.php
に以下のコードを書くとお試しができます。画面をリロードするとデータベースに書き込まれます。
// 編集者(editor)にユーザー関連の管理権限を付与
add_action('admin_init', function() {
$role = get_role( 'editor' );
$role->add_cap( 'list_users' );
$role->add_cap( 'create_users' );
$role->add_cap( 'delete_users' );
$role->add_cap( 'promote_users' );
$role->add_cap( 'edit_users' );
$role->add_cap( 'remove_users' );
});
一度書き込まれたらコードを消しても元には戻りませんので、元に戻したいときは remove_cap()
を書いてから画面を読み込んでください。
$role->remove_cap( 'list_users' );
こうして権限は付与できるものの、冒頭でも少し触れたように、残念ながらこれだけではナイーブすぎる挙動となるため使い勝手が悪いです。
例えばこのようなことが起こります:
より上位の権限のユーザーへの操作はできないようになっていてほしいところですが、できてしまうようでした。できればプラグインを使用せずにこれを解決したいところですが、権限によって表示・非表示する処理は複雑になるので、よほどのことがない限りは素直にプラグインに頼るのが良いと思いました。
User Role Editorは上述の問題をちゃんとケアしています。実際に動作させてみて確認しました。編集者は管理者を一覧することも追加や削除の操作も行えません。あくまで自身と同じ権限グループかより弱い権限グループに対する操作に限定されます。
よくできているなと思ったところは、編集者にプラグイン編集権限を付与したとしても、User Role Editor自身は編集者にみえないというところです。これが見えてしまったら意味がないですからね(笑)