diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-06-21 16:36:28 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-06-21 16:36:28 +0300 |
commit | b1dbabdec30d8e03afb0155b9494cfe2ef351352 (patch) | |
tree | d5e8b15aad0d8306fe273b56334603ab65ad084a | |
parent | 2c482097fc8028ec9f96d268c42016720aaf9be8 (diff) | |
download | gitlab-ce-b1dbabdec30d8e03afb0155b9494cfe2ef351352.tar.gz |
Improve query of authorized_projects. Cache results for authorized_groups, authorized_projects methods
-rw-r--r-- | app/models/user.rb | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/app/models/user.rb b/app/models/user.rb index 8efae30f35e..2944b332dd8 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -88,6 +88,7 @@ class User < ActiveRecord::Base has_many :assigned_issues, dependent: :destroy, foreign_key: :assignee_id, class_name: "Issue" has_many :assigned_merge_requests, dependent: :destroy, foreign_key: :assignee_id, class_name: "MergeRequest" + has_many :groups_projects, through: :groups, source: :projects has_many :personal_projects, through: :namespace, source: :projects has_many :projects, through: :users_projects has_many :master_projects, through: :users_projects, source: :project, @@ -233,15 +234,19 @@ class User < ActiveRecord::Base # Groups user has access to def authorized_groups - @group_ids ||= (groups.pluck(:id) + own_groups.pluck(:id) + authorized_projects.pluck(:namespace_id)) - Group.where(id: @group_ids) + @authorized_groups ||= begin + group_ids = (groups.pluck(:id) + own_groups.pluck(:id) + authorized_projects.pluck(:namespace_id)) + Group.where(id: group_ids) + end end # Projects user has access to def authorized_projects - @project_ids ||= (owned_projects.pluck(:id) + groups.map(&:projects).flatten.map(&:id) + projects.pluck(:id)).uniq - Project.where(id: @project_ids) + @authorized_projects ||= begin + project_ids = (owned_projects.pluck(:id) + groups_projects.pluck(:id) + projects.pluck(:id)).uniq + Project.where(id: project_ids).includes(:namespace) + end end # Team membership in authorized projects |