Administer Users by Role
サイトビルダーがサブ管理者ユーザーに対して、ロールに基づいて他のユーザーを編集、キャンセル、作成するための詳細な権限を設定できるようにします。Drupal Coreの「全か無か」の「administer users」権限よりも、より具体的な制御を提供します。
administerusersbyrole
インストール
composer require 'drupal/administerusersbyrole:8.x-3.6'
composer require 'drupal/administerusersbyrole:8.x-3.4'
概要
Administer Users by Roleモジュールは、サイト管理者が完全な「administer users」権限を付与することなく、特定のロールにユーザー管理タスクを委任できるようにします。これは、特定のユーザーが完全な管理アクセス権を持たずに特定のユーザーグループを管理する必要がある、複数階層の管理者を持つサイトで特に有用です。
このモジュールは、ユーザーの編集とキャンセルのためのロール固有の権限を自動的に生成します。システム内の各ロールに対して、そのロールを持つユーザーを編集およびキャンセルするための権限が作成されます。複数のロールを持つユーザーを編集またはキャンセルするには、サブ管理者はそれらすべてのロールを管理する権限を持っている必要があります。このモジュールは、管理者ロールをターゲットから意図的に除外しています。管理者を編集できるようにすると、モジュールのセキュリティ目的が無効になるためです。
これはDrupal 7モジュールであり、適切なメニューアクセスチェーンのためにChain Menu Access APIモジュールに依存しています。
Features
- ユーザー編集のための詳細なロールベースの権限 - システム内の各ロールに対して権限が動的に生成されます
- ユーザーアカウントのキャンセル(削除)のための詳細なロールベースの権限
- 完全な管理者アクセス権なしで新しいユーザーアカウントを作成するための個別の権限
- 編集可能なユーザーのみを表示するユーザー一覧ページ(admin/people)へのアクセス制御
- セキュリティのための管理者ロールの権限ターゲットからの自動除外
- 複数のロールを持つユーザーのサポート - サブ管理者は対象ユーザーが持つすべてのロールに対する権限が必要
- 編集およびキャンセルリンク用のカスタムフィールドハンドラーによるViewsモジュールとの統合
- フィルタリングされたユーザー管理Viewsのためのadmin_viewsモジュールとの互換性
- パスワード管理アクセスのためのpassword_policy_password_tabモジュールとの互換性
- 適切なアクセスコールバック処理のためのEntity API統合
- カスタムViewsで編集権限に基づいてユーザーをフィルタリングするためのクエリタグシステム
Use Cases
部門別ユーザー管理者
複数の部門を持つ大規模な組織では、自分の部門内のユーザーのみを管理できるロールベースのサブ管理者を作成できます。例えば、「マーケティング」ロールと「マーケティング管理者」ロールを作成します。「マーケティング管理者」に「マーケティング」ロールを持つユーザーを編集およびキャンセルする権限を付与します。これにより、マーケティング管理者は他の部門のユーザーにアクセスすることなく、マーケティングユーザーを管理できます。
メンバーシップサイト管理
複数のティア(Basic、Premium、VIP)を持つメンバーシップサイトでは、カスタマーサービススタッフがBasicとPremiumメンバーを管理できるようにしながら、VIPメンバーの管理は上級スタッフのみに制限できます。適切なロールを作成し、それに応じて権限を付与します。
ユーザー登録の委任
コンテンツエディターやモデレーターに完全な管理アクセス権を与えることなく、新しいユーザーアカウントの作成を許可します。これらのロールには「Create new users」権限のみを付与します。
階層的な管理
上級管理者がすべてのユーザータイプを管理でき、下級管理者が特定のユーザーグループのみを管理できる階層的な管理システムを実装します。これにより、下級管理者がより高い権限を持つユーザーのアカウントを誤って変更することを防ぎます。
セルフサービスポータル
適切なロール割り当てと組み合わせることで、チームリーダーが他のユーザーの情報を公開することなく、自分のチームのメンバー(チームのロールを持つユーザー)を編集できるようにします。
Tips
- 本番環境にデプロイする前に、常にテストアカウントで権限設定をテストしてください
- 「edit users with no custom roles」はカスタムロールを持たないユーザーにのみ適用されることを覚えておいてください - いずれかのロールを持つユーザーには特定のロール権限が必要です
- カスタムViewsで「administerusersbyrole_edit_access」クエリタグを使用すると、編集権限に基づいてユーザーが自動的にフィルタリングされます
- このモジュールはViewsと組み合わせてロール固有のユーザー管理インターフェースを作成するのに適しています
- 権限管理を簡素化するために、明確なロール階層を作成することを検討してください
- 多くのロールがある場合、権限構造は複雑になる可能性があるため、ドキュメント化してください
Technical Details
Admin Pages 1
/admin/people
ユーザー管理の概要ページ。「administer users」ではなく「access users overview」権限を持つユーザーがアクセスした場合、ロール固有の権限に基づいて現在のユーザーが編集権限を持つユーザーのみが表示されます。
権限 6
Hooks 5
hook_permission
システム内の利用可能なすべてのロールに基づいて、ユーザーの編集とキャンセルの権限を動的に生成します。
hook_menu_alter
ユーザー関連のメニュー項目のアクセスコールバックをチェーンして、モジュールのアクセス制御ロジックを実装します。
hook_query_alter
「administerusersbyrole_edit_access」タグが付けられたクエリを変更して、現在のユーザーが編集できないユーザーをフィルタリングします。
hook_entity_info_alter
Entity APIモジュールと統合するために、ユーザーエンティティのアクセスコールバックを置き換えます。
hook_views_data_alter
このモジュールの権限を尊重するように、ユーザー編集およびキャンセルリンクのViewsフィールドハンドラーを置き換えます。
Troubleshooting 5
サブ管理者ロールにCoreの「administer users」権限が付与されていないことを確認してください。この権限はAdminister Users by Roleからのすべての権限をバイパスします。
Chain Menu Access APIモジュールがインストールされ、有効になっていることを確認してください。データベースの更新(update.phpまたはdrush updatedb)を実行して、バージョン2.xへの移行を完了します。
これは仕様です。複数のロールを持つユーザーを編集するには、そのすべてのロールを編集する権限を持っている必要があります。必要に応じて追加のロール固有の編集権限を付与してください。
これは意図的なセキュリティ動作です。サイトの管理者ロールを持つユーザーは、権限昇格を防ぐために、サブ管理者による編集/キャンセルから除外されています。
このモジュールはカスタムViewsフィールドハンドラーを提供します。正しいフィールドハンドラーを使用していること、およびモジュールのViews統合がロードされていることを確認してください(必要に応じてキャッシュをクリアしてください)。
Security Notes 5
- 管理者ロールは意図的にこのモジュールの権限のターゲットから除外されています - これにより、サブ管理者が管理者のパスワードを変更して完全なアクセス権を取得する権限昇格を防ぎます
- Coreの「administer users」権限は常にこのモジュールの権限をオーバーライドします - サブ管理者ロールには決して付与しないでください
- ユーザーはキャンセル権限を持っている場合、一括操作フォームを通じて自分のアカウントをキャンセルできません - フォームは通常の自己キャンセル制限をバイパスします
- キャンセル権限を付与する際は、サイトの設定によってはユーザーをキャンセルするとそのコンテンツも削除される可能性があることを覚えておいてください
- このモジュールは権限に関係なく、ユーザーID 1(ルート管理者)の編集を防止します