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

user_max_access_level_in_groups_preloader.rb « preloaders « models « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 14f1d271572f879c52a9433944ca1bc276578c29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# frozen_string_literal: true

module Preloaders
  # This class preloads the max access level (role) for the user within the given groups and
  # stores the values in requests store.
  # Will only be able to preload max access level for groups where the user is a direct member
  class UserMaxAccessLevelInGroupsPreloader
    include BulkMemberAccessLoad

    def initialize(groups, user)
      @groups = groups
      @user = user
    end

    def execute
      group_memberships = GroupMember.active_without_invites_and_requests
                                     .non_minimal_access
                                     .where(user: @user, source_id: @groups)
                                     .group(:source_id)
                                     .maximum(:access_level)

      group_memberships.each do |group_id, max_access_level|
        merge_value_to_request_store(User, @user.id, group_id, max_access_level)
      end
    end
  end
end