Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-13 18:07:53 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-13 18:07:53 +0300
commita5ab3467a705b62911feacc3cf627fdbb00aa198 (patch)
tree65143ce13405efccb922fc428624ad57c38b6efa /app/finders
parenteb30dd6e28f6fc9eb8021d205f6ed84511f001e2 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/finders')
-rw-r--r--app/finders/group_members_finder.rb44
1 files changed, 35 insertions, 9 deletions
diff --git a/app/finders/group_members_finder.rb b/app/finders/group_members_finder.rb
index d8739c350e4..05151b4f1f3 100644
--- a/app/finders/group_members_finder.rb
+++ b/app/finders/group_members_finder.rb
@@ -1,38 +1,64 @@
# frozen_string_literal: true
class GroupMembersFinder < UnionFinder
- def initialize(group)
+ # Params can be any of the following:
+ # two_factor: string. 'enabled' or 'disabled' are returning different set of data, other values are not effective.
+ # sort: string
+ # search: string
+
+ def initialize(group, user = nil)
@group = group
+ @user = user
end
# rubocop: disable CodeReuse/ActiveRecord
- def execute(include_relations: [:inherited, :direct])
- group_members = @group.members
+ def execute(include_relations: [:inherited, :direct], params: {})
+ group_members = group.members
relations = []
return group_members if include_relations == [:direct]
relations << group_members if include_relations.include?(:direct)
- if include_relations.include?(:inherited) && @group.parent
+ if include_relations.include?(:inherited) && group.parent
parents_members = GroupMember.non_request
- .where(source_id: @group.ancestors.select(:id))
- .where.not(user_id: @group.users.select(:id))
+ .where(source_id: group.ancestors.select(:id))
+ .where.not(user_id: group.users.select(:id))
relations << parents_members
end
if include_relations.include?(:descendants)
descendant_members = GroupMember.non_request
- .where(source_id: @group.descendants.select(:id))
- .where.not(user_id: @group.users.select(:id))
+ .where(source_id: group.descendants.select(:id))
+ .where.not(user_id: group.users.select(:id))
relations << descendant_members
end
- find_union(relations, GroupMember)
+ members = find_union(relations, GroupMember)
+ filter_members(members, params)
end
# rubocop: enable CodeReuse/ActiveRecord
+
+ private
+
+ attr_reader :user, :group
+
+ def filter_members(members, params)
+ members = members.search(params[:search]) if params[:search].present?
+ members = members.sort_by_attribute(params[:sort]) if params[:sort].present?
+
+ if can_manage_members && params[:two_factor].present?
+ members = members.filter_by_2fa(params[:two_factor])
+ end
+
+ members
+ end
+
+ def can_manage_members
+ Ability.allowed?(user, :admin_group_member, group)
+ end
end
GroupMembersFinder.prepend_if_ee('EE::GroupMembersFinder')