web-dev-qa-db-ja.com

Drupalすべての既存のロールと指定されたロールのすべてのユーザーを取得するメソッド

特定のロールに属するすべてのユーザーのリストを取得したいと思います。

クエリは次のことを知っています。

  • drupalメソッドがある場合(Admin >> User Management(admin/user/roles) node_get_types メソッドを使用してすべてのノードタイプを取得するのと同様です。
  • 特定のロールに属するすべてのユーザーのリストを取得するdrupalメソッドがある場合.

roleテーブルをクエリし、その結果をuser_rolesテーブル、drupalには組み込みのメソッドがあるのではないかと感じました。これにより、検索を逃した可能性のある望ましい結果を得ることができます。

this の投稿ではなく、ロールを使用してユーザー権限に関連するものをチェックすることは理想的ではなく、ユーザー権限をチェックすることは理想的ではないことを認識しています。

上記のクエリに対して明確な回答を得ることができればすばらしいと思います。

2
optimusprime619

user_roles() 関数を使用して、システム内のロールのリストを取得できます。たとえば、特定の権限を含むロールのみを取得する場合など、特定の条件を渡すこともできます。

役割別にユーザーのリストを取得する限り、残念ながらそのような機能はありません。小さなヘルパー関数を自分で書く必要があります。私は通常、次のようなものを使用します。

_function users_by_role($role_id) {
  $sql = 'SELECT uid FROM {users_roles} WHERE rid = %d';
  $q = db_query($sql, $role_id);
  $uids = array();
  while ($row = db_fetch_array($q)) {
    $uids[] = $row['uid'];
  }

  return $uids;
}
_

これにより、特定のロールのユーザーIDが提供されます。その後、user_load()を使用してそれぞれのユーザーオブジェクトを取得するか、単純に上記のクエリに結合を追加して、必要なデータを直接含めることができます。

4
Clive

ser_roles() はロールの配列を返します。特定のロールのすべてのユーザーを返す関数はありません。

3
Oswald

Views を使用してユーザーのリストをクエリし、ロールでフィルターできます。

または、ビューで_User: Roles_の引数を指定できます。次に、カスタムモジュールで user_roles() を使用して、すべてのロールのリストを取得します。 roles配列をループし、ループ内で views_embed_view('my_users_view', 'display_id', $roleid) を使用して、この関数に3番目の引数としてロールIDを渡します。

0
Beebee