カテゴリー
WordPressカスタマイズ

WordPress権限管理ガイド:ユーザーごとのアクセス権を最適化する方法

WordPressにおける権限管理はサイトの運営やセキュリティの向上に欠かせない重要な要素です。適切に設定された権限はユーザーごとの操作を効率化し、不必要な機能へのアクセスを防ぐことで、サイト全体の安全性を確保します。 最適な権限設定を行い、安全で効率的なWordPress運用を目指しましょう。

WordPressでは、サイト運営者が各ユーザーに割り当てる権限を管理するために、権限グループ(ユーザーロール)という概念が使われています。
これにより、ユーザーごとにサイト内で実行できるタスクが制限され、役割に応じた管理が可能です。
とくに大規模なサイトや複数の寄稿者がいるサイトでは、適切に権限を管理することがサイトの安全性や運用効率を高めます。

サイト運営者はユーザーを特定の権限グループに割り当てることで、多岐にわたるタスクへのアクセスを管理できます。

  • 投稿の作成・編集
  • 固定ページの作成・編集
  • リンクやカテゴリーの管理
  • コメントのモデレーション
  • プラグインやテーマの管理
  • 他のユーザーの管理

WordPressの権限グループ(ユーザーロール)

デフォルトで6つの権限グループが用意されています。

権限グループ 説明 できること できないこと
特権管理者 マルチサイト環境でのみ使用。ネットワーク全体の管理者 すべてのサイトの設定変更、ユーザー管理、プラグイン・テーマのインストールなど、ネットワーク全体に関するあらゆる操作
管理者 サイト全体の管理者 サイト設定の変更、テーマ・プラグインのインストール・削除、ユーザーの追加・削除など、サイトに関するあらゆる操作
編集者 サイト全体のコンテンツ管理者 投稿・固定ページの作成・編集・削除、コメントのモデレーション、カテゴリーの管理 特定のユーザーの投稿のみを編集
投稿者 自分の投稿の管理者 自分の投稿の作成・編集・削除、ファイルのアップロード 他のユーザーの投稿を編集・削除
寄稿者 投稿の作成者 (公開前の状態) 自分の投稿の作成・編集 自分の投稿の公開、他のユーザーの投稿を編集・削除
購読者 サイトの閲覧者 プロフィールの編集、サイトの閲覧 投稿の作成・編集、設定の変更など

特権管理者 (Super Admin)

特権管理者はマルチサイト環境でのみ使用される権限でネットワーク全体を管理する最高権限を持つユーザーです。
このロールでは、すべてのサイトの管理設定、ユーザー管理、プラグインやテーマのインストール、ネットワークの設定など、WordPressネットワーク全体にわたる操作が可能です。
特権管理者は個々のサイトの管理者よりも高い権限を持ち、ネットワーク内の全サイトに影響を与える決定を行います。

管理者 (Administrator)

管理者はサイト全体のすべての機能にアクセスできる最上位の権限です。
これにはサイト設定の変更、テーマやプラグインのインストール・削除、ユーザーの追加・削除などが含まれます。
管理者の権限を持つユーザーは他のユーザーにアクセス権を与えたり、サイト全体を統括する責任を負います。
そのため、慎重にこの権限を与えることが重要です。

編集者 (Editor)

編集者はサイト全体のコンテンツ管理を担当します。
自分だけでなく他のユーザーが作成した投稿やページも編集、公開、削除する権限を持っています。
また、コメントのモデレーションやカテゴリーの管理も可能です。
この権限はサイトに多くの寄稿者がいる場合に、投稿の品質管理や公開スケジュールの調整を担当するユーザーに与えるのが一般的です。

投稿者 (Author)

投稿者は自分が作成した投稿を管理することができます。
投稿の作成、公開、編集、削除が可能であり、また、ファイルのアップロード権限も持っています。
しかし、他のユーザーの投稿には干渉できないため、個別の寄稿者に適した権限です。
寄稿者が記事を自主的に公開する必要がある場合に、このロールが適用されます。

寄稿者 (Contributor)

寄稿者は自分の投稿を作成・編集できますが、公開することはできません。
寄稿者が書いた記事は編集者や管理者によってレビューされ、公開されます。
このロールは品質管理を重視するサイトにおいて、投稿内容をチェックしてから公開する必要がある場合に適しています。

購読者 (Subscriber)

購読者はサイト上で自分のプロフィールを管理することしかできません。
他の投稿やページを編集することはできず、閲覧のみが可能です。
このロールはおもにサイトのコンテンツを購読する目的で使用されるユーザー向けです。

デフォルト権限の管理

新しいユーザーを追加する際、管理画面の一般設定でデフォルトの権限グループを設定できます。
権限グループはサイトにおけるユーザーの役割と責任を定義するための重要な要素です。
特定の権限グループに所属するユーザーはそのグループに関連するタスクのみを実行できます。

権限のカスタマイズの実例とコード

add_role()関数を使って、権限グループをコントロールできます。

新しい権限グループの追加

content_manager という権限を追加して、投稿の編集や削除のみを許可してみます。

add_role(
    'content_manager',
    'コンテンツ管理者',
    array(
        'read'         => true,  // サイトにアクセスできる
        'edit_posts'   => true,  // 投稿を編集できる
        'delete_posts' => true,  // 投稿を削除できる
        'publish_posts' => true  // 投稿を公開できる
    )
);

既存の権限グループへの権限の追加

また、既存のユーザー権限グループに特定の権限を追加できます。
つぎに編集者にプラグインの管理を許可する例を示します。

$role = get_role('editor');
$role->add_cap('manage_plugins');

特定の権限の削除

逆に特定の権限を削除することもできます。
下記は投稿者が投稿を削除できないようにしています。

$role = get_role('author');
$role->remove_cap('delete_posts');

特定のカスタム投稿タイプ用のロールを追加

例えば、最新のお知らせを投稿するためのカスタム投稿タイプ info_post があるとします。
この投稿管理だけをできる専用のユーザー権限を作成してみます。
まずは、info_editor という新しいユーザー権限を追加します。

function add_info_editor_role() {
    // info_editor というカスタム投稿専用のユーザー権限グループを作成
    add_role(
        'info_editor',
        __('お知らせ編集者'),
        array(
            'read' => true,  // サイトの閲覧ができる
            'edit_info_posts' => true,  // info_post の編集権限
            'publish_info_posts' => true,  // info_post の公開権限
            'delete_info_posts' => true,  // info_post の削除権限
            'edit_others_info_posts' => true,  // 他のユーザーの info_post を編集
            'delete_others_info_posts' => true,  // 他のユーザーの info_post を削除
        )
    );
}
add_action('init', 'add_info_editor_role');

そして、カスタム投稿タイプ info_post のための専用の権限をマッピングします。
これにより、info_editor 権限を持つユーザーが適切な権限でカスタム投稿タイプを管理できるようになります。

function add_info_post_caps() {
    // info_editor と administrator に権限を追加
    $roles = array('info_editor', 'administrator');

    foreach ($roles as $role_name) {
        $role = get_role($role_name);

        // カスタム投稿タイプ info_post の専用権限を追加
        $role->add_cap('edit_info_post');
        $role->add_cap('read_info_post');
        $role->add_cap('delete_info_post');
        $role->add_cap('edit_info_posts');
        $role->add_cap('edit_others_info_posts');
        $role->add_cap('publish_info_posts');
        $role->add_cap('read_private_info_posts');
        $role->add_cap('delete_info_posts');
        $role->add_cap('delete_private_info_posts');
        $role->add_cap('delete_published_info_posts');
        $role->add_cap('delete_others_info_posts');
        $role->add_cap('edit_private_info_posts');
        $role->add_cap('edit_published_info_posts');
    }
}
add_action('admin_init', 'add_info_post_caps');

これらはお使いのテーマの functions.php などに記述しますが、もし、コードを書かずに簡単に権限を管理したい場合、User Role Editor などのプラグインでも実装可能です。

WordPress開発環境

プラグイン開発などの機能拡張においても、権限管理の理解と実装は非常に重要な要素です。
ユーザーごとに適切な権限を設定することで、サイトの運用やセキュリティが大きく向上します。
大規模なサイトや複数のユーザーが関わる環境では、権限管理が適切に行われないと、予期せぬエラーやセキュリティリスクが生じる可能性があります。
ここでは、プラグイン開発における権限管理の必要性について、さらに深掘りして説明します。

セキュリティの重要性

権限の適切な管理はセキュリティ上不可欠です。特定の機能や情報へのアクセスを制限することで、悪意のある攻撃や意図しない操作からサイトを守ることができます。
たとえば、プラグインで機密情報を扱う場合、管理者のみがその情報にアクセスできるようにする必要があります。
これはユーザーのミスによる設定の変更やデータ漏洩を防ぐ重要な対策です。

ユーザー体験の最適化

権限管理を適切に実装することで、ユーザーが必要な機能にのみアクセスできるため、シンプルで効率的な操作が可能になります。
不要な機能や情報が表示されないことで、ユーザーが混乱するリスクを軽減し、効率的に業務を進めることができます。
プラグイン開発者として、各権限グループのユーザーがどの機能を必要としているのかを考慮し、無駄なく必要な機能だけを提供することがユーザーエクスペリエンスの向上につながります。

カスタマイズの柔軟性

WordPressの権限システムは非常に柔軟で、プラグインを通じて簡単に拡張できます。プラグイン開発では、既存のユーザーロールに対して特定の権限を追加したり、新しいロールを作成したりすることが可能です。例えば、プラグインが特定のデータを管理する場合、新しいロール(例:データ管理者)を作成し、特定のタスクを実行できるようにカスタマイズすることができます。これにより、特定のユーザーに必要なだけの権限を与え、操作範囲を限定することができます。

プラグインの安全性と信頼性

プラグインは多くのユーザーによってインストールされ、運用されるため、誰でもすべての機能にアクセスできると、セキュリティホールになりかねません。
適切な権限管理はプラグインの信頼性を高め、外部からの攻撃や誤操作を防ぐ一助となります。
例えば、設定変更やデータベースへのアクセスを管理者権限のみに限定することで、誤った変更が加えられるリスクを減少させることができます。

ワークフローの効率化

大規模なサイトやチームでの運用では、ワークフローが複雑になることがあります。
権限管理を活用することで、投稿者はコンテンツの作成に集中し、編集者や管理者がレビュー・公開する、といった役割分担が可能になります。
プラグイン開発においても、こうしたワークフローを考慮し、特定の権限グループにのみ機能を提供する仕組みを実装することで、効率的な作業が促進されます。

profile image

執筆:R3098

WEBサービス構築・監修が生業です。WordPress 関連では Aurora Heatmap などのプラグイン開発も行っています。サイト運営者の力になりたいと考えます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。