web-dev-qa-db-ja.com

編集者による管理者アカウントの編集/削除を禁止する

他のユーザーを追加/編集/削除できるようにするには編集者が必要です。それらにそれらの能力を与えることはこれと同様のコードで簡単です:

$editor = get_role('editor');
$editor->add_cap('edit_users');

問題は、彼らが他のユーザーを追加/編集/削除するのに必要な特権を持っているとき、彼らは管理ユーザーにそれらのすべてをやるそして/または自分自身をadminロールに昇格させることができるということです。

指定されたユーザーロールのみを追加/編集/削除できるようにする方法はありますか(ベストケースシナリオ)。あるいは別の方法として、編集者が管理者アカウントに対して何もしないようにして、それらのアカウントをリストビューから完全に隠しさえしないようにします。

1
Sam

WordPressが使用するget_editable_rolesという関数があります。これは、特定のユーザーがどの役割を編集できるかを決定するために使用されます。この関数のソースは以下のようになります。

function get_editable_roles() {
    global $wp_roles;

    $all_roles = $wp_roles->roles;
    $editable_roles = apply_filters('editable_roles', $all_roles);

    return $editable_roles;
}

だから、あなたが探しているものを手に入れるために* editable_roles *フィルタにフックできるかもしれないように見えます。このようなもの:

function wpse_80220_filter( $roles ) {
    $current_user = wp_get_current_user();

    if ( in_array( 'editor', $current_user->roles ) ) {
        unset( $roles['administrator'] );
    }

    return $roles;
}
add_filter( 'editable_roles', 'wpse_80220_filter' );

私は上記のコードのどれもテストしていません、しかしそれを試してみて、それがトリックをするかどうか私に知らせてください!

2
Andy Adams