summaryrefslogtreecommitdiff
path: root/app/finders/groups_finder.rb
blob: b5f3176461c5a2894ae0f3ceb9e2b1512d667d05 (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
28
29
30
31
32
33
34
35
36
37
38
39
class GroupsFinder
  def execute(current_user, options = {})
    all_groups(current_user)
  end

  private

  def all_groups(current_user)
    group_ids = if current_user
                  if current_user.authorized_groups.any?
                    # User has access to groups
                    #
                    # Return only:
                    #   groups with public projects
                    #   groups with internal projects
                    #   groups with joined projects
                    #
                    Project.public_and_internal_only.pluck(:namespace_id) +
                      current_user.authorized_groups.pluck(:id)
                  else
                    # User has no group membership
                    #
                    # Return only:
                    #   groups with public projects
                    #   groups with internal projects
                    #
                    Project.public_and_internal_only.pluck(:namespace_id)
                  end
                else
                  # Not authenticated
                  #
                  # Return only:
                  #   groups with public projects
                  Project.public_only.pluck(:namespace_id)
                end

    Group.where("public IS TRUE OR id IN(?)", group_ids)
  end
end