web-dev-qa-db-ja.com

Wordpressロール - 保護管理者ロール

私たちは彼らのサイトの所有者、管理者の役割を提供したいのですが、ユーザー1を削除したくないです。ユーザー1のアカウントまたはその上の役割ではなく、ユーザーを追加/編集/削除するためのユーザー権限。

Drupalには、複数の管理者アカウントの作成を許可する "Protect user 1"というモジュールがありますが、どれもユーザー1を編集/削除することはできません。WPエコシステムにはこのようなものがありますか?

2
JohnDoe

DrupalとはWPで少し違います。まず、adminロールはすべてを実行できるロールになるように特別に設計されています。管理者ロールを制限するのではなく、必要なカスタムロールを作成することをお勧めします - 制限したいもの以外のすべての機能を持つalmost-adminタイプのロールを設定します。あなたが開発者だけが本当に必要とするであろう、より技術的な能力のいくつかを取り除くことができ、オーナーのログインをもう少し制限することによってあなたがかなり多くの管理者を持つことができないのでレベルの高いユーザーが、サイトがハッキングされる可能性が高まる場所に移動します。サイトがハッキングされていても、より低いレベルのユーザーログインを取得している場合は、何らかの被害を防ぐことができるかもしれません。

もう1つの問題は、WPロールおよび機能システムが、ユーザーが機能に部分的にアクセスできるように設定されていないことです。ですから、一般的なユーザ管理プラグインを使っていても、あるロールにdelete_users機能を持たせ、他のロールにはできないようにすることはできません。しかし、おそらく他の役割で十分でしょう。もしあなたがそれらを全面的にdelete_usersする能力を否定するならば、あなたがまだそれらにadd_usersedit_users、そしてpromote_usersする能力を与えることができます。

4
WebElaine

これは map_meta_cap フィルタに最適です。

function my_map_meta_cap( $caps, $cap, $user_id, $args ) {
  if( 'delete_user' !== $cap ) {
    return $caps;
  }
  if( isset( $args[0] ) && 1 === $args[0] ) {
    $caps[] = 'cant_do_this';
  }
  return $caps;
}
add_filter( 'map_meta_cap', 'my_map_meta_cap', 10, 4 );

このコードでは、user_idが1のユーザーを削除しようとする人は誰でもcant_do_this機能を持つ必要があります。だれもその機能を持っていないので、だれもこのユーザを削除できません。

もちろん、管理者がプラグインを編集できる場合は、プラグインを無効にしてユーザーを削除するだけで済みます。多分それは必需品のプラグインとしてそれを使用するのが最善です。

2
Nathan Johnson