権限グループと権限

権限グループと権限は、WordPress の2つの重要な側面で、ユーザー権限をコントロールできます。

WordPress は、権限グループとその権限を、テーブル options のキー user_roles の下に格納します。

権限グループ

権限グループは、ユーザーの一連の権限を定義します。たとえば、ユーザーが自分のダッシュボードで何を見たり、何をしたりできるかです。

デフォルトでは、WordPress には6つの権限グループがあります:

  • 特権管理者 (Super Admin)
  • 管理者 (Administrator)
  • 編集者 (Editor)
  • 投稿者 (Author)
  • 寄稿者 (Contributor)
  • 購読者 (Subscriber)

権限グループを追加したり、デフォルトの権限グループを削除できます。

ユーザーの権限グループ

権限グループの追加

add_role() を使用して、新しい権限グループを追加し、権限を割り当てられます。

function wporg_simple_role() {
  add_role(
    'simple_role',
    'Simple Role',
    array(
      'read'         => true,
      'edit_posts'   => true,
      'upload_files' => true,
    ),
  );
}

// Add the simple_role.
add_action( 'init', 'wporg_simple_role' );
最初に add_role() をコールすると、権限グループと権限がデータベースに格納されます !

連続してコールしても、権限リストの変更も含めて、何もしません。これはあなたが期待している動作ではないかもしれません。

権限リストを一括で変更するには: remove_role() を使って権限グループを削除し、add_role() を使って新しい権限を追加します。

必ず、権限が期待しているものと異なる場合 (つまり、このような状態) にのみ実行してください。さもないと、パフォーマンスが著しく低下します !

権限グループの削除

remove_role() で権限グループを削除します。

function wporg_simple_role_remove() {
  remove_role( 'simple_role' );
}

// Remove the simple_role.
add_action( 'init', 'wporg_simple_role_remove' );
最初に remove_role() をコールすると、権限グループと権限がデータベースから削除されます !

連続してコールしても、何もしません。

デフォルトの権限グループを削除する場合:

  • 管理者と特権管理者の権限グループを削除することは おすすめしません !
  • WordPress の将来のアップデートで、削除した権限グループが再び追加される可能性があるため、プラグイン / テーマのコードは必ず保管しておいてください。
  • WordPress のデフォルト権限グループである subscriber を削除する場合には、update_option('default_role', YOUR_NEW_DEFAULT_ROLE) を実行します。

権限

権限とは、「権限グループ」ができること、できないことを定義するものです: 投稿の編集、投稿の公開、等。

カスタム投稿タイプは、特定の権限のセットを必要とすることがあります。

権限の追加

権限グループに新しい権限を定義できます。

get_role() を使って権限グループオブジェクトを取得し、そのオブジェクトの add_cap() メソッドを使って新しい権限を追加します。

function wporg_simple_role_caps() {
  // Gets the simple_role role object.
  $role = get_role( 'simple_role' );

  // Add a new capability.
  $role->add_cap( 'edit_others_posts', true );
}

// Add simple_role capabilities, priority must be after the initial role definition.
add_action( 'init', 'wporg_simple_role_caps', 11 );
どの権限グループにもカスタム権限を追加できます。

WordPress のデフォルトの管理画面では、これらは何の効果もありませんが、カスタムの管理画面やフロントエンドの領域には使用できます。

権限の削除

権限グループから権限を削除できます。

実装は「権限の追加」と似ていますが、違いは権限グループオブジェクトに remove_cap() メソッドを使うことです。

権限グループと権限の使用

権限グループの取得

get_role() で、その権限グループのすべての権限を含む、権限グループオブジェクトを取得します。

ユーザーのできること

ユーザーが指定された「権限グループ」または「権限」を持っているかどうかを user_can() でチェックします。

user_can( $user, $capability );
ドキュメント化されていない第3引数 $args があり、テスト対象のオブジェクトを含めることができます。

例: 投稿 ID を渡して、特定の投稿の権限をテストする。

現在のユーザーのできること

current_user_can() は user_can() のラッパー関数で、現在のユーザーオブジェクトをパラメータ $user として使用します。

これは、バックエンドとフロントエンドの領域が、アクセスや変更に一定レベルの権限を必要とするシナリオで使用します。

current_user_can( $capability );

ここでは、ユーザーが適切な権限を持っている場合に、テンプレート・ファイルに編集リンクを追加する実用的な例を示します:

if ( current_user_can( 'edit_posts' ) ) {
  edit_post_link( esc_html__( 'Edit', 'wporg' ), '<p>', '</p>' );
}

マルチサイト

current_user_can_for_blog() 関数は、現在のユーザーが特定のブログで特定の「権限グループ」または「権限」を持っているかどうかをテストするために使用されます。

current_user_can_for_blog( $blog_id, $capability );

参考資料

ユーザーの権限グループと権限のドキュメント。

原文 / 日本語訳

s
検索
c
新規投稿を作成する
r
返信
e
編集
t
ページのトップへ
j
次の投稿やコメントに移動
k
前の投稿やコメントに移動
o
コメントの表示を切替
esc
投稿やコメントの編集をキャンセル