diff options
Diffstat (limited to 'app/controllers/groups/group_members_controller.rb')
-rw-r--r-- | app/controllers/groups/group_members_controller.rb | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/app/controllers/groups/group_members_controller.rb b/app/controllers/groups/group_members_controller.rb index 5df7ff0632a..c2ac56ccc63 100644 --- a/app/controllers/groups/group_members_controller.rb +++ b/app/controllers/groups/group_members_controller.rb @@ -4,6 +4,7 @@ class Groups::GroupMembersController < Groups::ApplicationController include MembershipActions include MembersPresentation include SortingHelper + include Gitlab::Utils::StrongMemoize MEMBER_PER_PAGE_LIMIT = 50 @@ -21,16 +22,17 @@ class Groups::GroupMembersController < Groups::ApplicationController feature_category :authentication_and_authorization + helper_method :can_manage_members? + def index + preload_max_access @sort = params[:sort].presence || sort_value_name - @project = @group.projects.find(params[:project_id]) if params[:project_id] - @members = GroupMembersFinder .new(@group, current_user, params: filter_params) .execute(include_relations: requested_relations) - if can_manage_members + if can_manage_members? @skip_groups = @group.related_group_ids @invited_members = @members.invite @@ -52,8 +54,18 @@ class Groups::GroupMembersController < Groups::ApplicationController private - def can_manage_members - can?(current_user, :admin_group_member, @group) + def preload_max_access + return unless current_user + + # this allows the can? against admin type queries in this action to + # only perform the query once, even if it is cached + current_user.max_access_for_group[@group.id] = @group.max_member_access(current_user) + end + + def can_manage_members? + strong_memoize(:can_manage_members) do + can?(current_user, :admin_group_member, @group) + end end def present_invited_members(invited_members) @@ -77,4 +89,4 @@ class Groups::GroupMembersController < Groups::ApplicationController end end -Groups::GroupMembersController.prepend_if_ee('EE::Groups::GroupMembersController') +Groups::GroupMembersController.prepend_mod_with('Groups::GroupMembersController') |