BigW Consortium Gitlab

without_nested_groups.rb 1013 Bytes
Newer Older
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 28
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)

29 30 31
        ProjectAuthorization
          .unscoped
          .select_from_union(union)
32 33 34 35
      end
    end
  end
end