31 lines
1,015 B
Ruby
31 lines
1,015 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
class GroupSearchResults < SearchResults
|
||
|
def initialize(current_user, limit_projects, group, query, default_project_filter: false, per_page: 20)
|
||
|
super(current_user, limit_projects, query, default_project_filter: default_project_filter, per_page: per_page)
|
||
|
|
||
|
@group = group
|
||
|
end
|
||
|
|
||
|
# rubocop:disable CodeReuse/ActiveRecord
|
||
|
def users
|
||
|
# 1: get all groups the current user has access to
|
||
|
groups = GroupsFinder.new(current_user).execute.joins(:users)
|
||
|
|
||
|
# 2: Get the group's whole hierarchy
|
||
|
group_users = @group.direct_and_indirect_users
|
||
|
|
||
|
# 3: get all users the current user has access to (->
|
||
|
# `SearchResults#users`), which also applies the query.
|
||
|
users = super
|
||
|
|
||
|
# 4: filter for users that belong to the previously selected groups
|
||
|
users
|
||
|
.where(id: group_users.select('id'))
|
||
|
.where(id: groups.select('members.user_id'))
|
||
|
end
|
||
|
# rubocop:enable CodeReuse/ActiveRecord
|
||
|
end
|
||
|
end
|