Use SQL::Union for User#authorized_groups

This removes the need for plucking any IDs into Ruby.
This commit is contained in:
Yorick Peterse 2015-11-12 17:38:20 +01:00
parent 656d9ff69b
commit 189c40c33d
1 changed files with 7 additions and 4 deletions

View File

@ -391,10 +391,13 @@ class User < ActiveRecord::Base
# Groups user has access to
def authorized_groups
@authorized_groups ||= begin
group_ids = (groups.pluck(:id) + authorized_projects.pluck(:namespace_id))
Group.where(id: group_ids)
end
@authorized_groups ||=
begin
union = Gitlab::SQL::Union.
new([groups.select(:id), authorized_projects.select(:namespace_id)])
Group.where("id IN (#{union.to_sql})")
end
end
# Projects user has access to