web-dev-qa-db-ja.com

ユーザーが特定の役割を持つ新しいユーザーを作成できないようにする

マルチサイトインストールでは、いくつかのカスタムロールを作成しました。それらのいくつかは新しいユーザーを作成する機能を持っています。

許可された役割を持つユーザーのみが新しいユーザーを作成できるようにしたいです。

1つのステップはドロップダウンから役割を削除するためにeditable_rolesフィルターを使用することですが、これはユーザーが選択値を変更して「許可されていない」役割を持つユーザーを作成することを妨げません。

3
Christopher

1つのステップはドロップダウンから役割を削除するためにeditable_rolesフィルターを使用することですが、これはユーザーが選択値を変更して「許可されていない」役割を持つユーザーを作成することを妨げません。

はい、そうです。このフィルタはドロップダウン専用ではありません。 editable_roles を修正しても、実際には許可されていないロールをユーザーが割り当てることができなくなります。

これは、 edit_user() (新規ユーザーを追加するために使用される関数)が get_editable_roles() も呼び出すため、ユーザーにその役割を付与することが許可されていない場合は無効になるためです。

これがあなたができることの簡単な例です:

/**
 * Removes Administrator from roles list if user isn't an admin themselves.
 *
 * This way, only admins can make new admins.
 *
 * @param array $all_roles List of roles.
 * @return array Modified list of roles.
 */
function wpse_293133_filter_editable_roles( $all_roles ) {
  if ( ! is_super_admin( get_current_user_id() ) ) {
    unset( $all_roles['administrator'] );
  }

  return $all_roles;
}

add_filter( 'editable_roles', 'wpse_293133_filter_editable_roles' );
3
swissspidy