module Gitlab module ProjectAuthorizations # Calculating new project authorizations when not supporting nested groups. class WithoutNestedGroups attr_reader :user # user - The User object for which to calculate the authorizations. def initialize(user) @user = user end def calculate relations = [ # Projects the user is a direct member of user.projects.select_for_project_authorization, # Personal projects user.personal_projects.select_as_master_for_project_authorization, # Projects of groups the user is a member of user.groups_projects.select_for_project_authorization, # Projects shared with groups the user is a member of user.groups.joins(:shared_projects).select_for_project_authorization ] union = Gitlab::SQL::Union.new(relations) ProjectAuthorization .unscoped .select_from_union(union) end end end end