Commit a54b2e80 authored by Jakub Jirutka's avatar Jakub Jirutka

Optimize query for keys of repository members

…to load them at once and then use query cache.
parent 82ae973a
...@@ -25,21 +25,25 @@ module Authority ...@@ -25,21 +25,25 @@ module Authority
end end
def repository_readers def repository_readers
keys = Key.joins({user: :users_projects}). repository_members[UsersProject::REPORTER]
where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::REPORTER)
keys.map(&:identifier) + deploy_keys.map(&:identifier)
end end
def repository_writers def repository_writers
keys = Key.joins({user: :users_projects}). repository_members[UsersProject::DEVELOPER]
where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::DEVELOPER)
keys.map(&:identifier)
end end
def repository_masters def repository_masters
keys = Key.joins({user: :users_projects}). repository_members[UsersProject::MASTER]
where("users_projects.project_id = ? AND users_projects.project_access = ?", id, UsersProject::MASTER) end
keys.map(&:identifier)
def repository_members
keys = Hash.new {|h,k| h[k] = [] }
UsersProject.select("keys.identifier, project_access").
joins(user: :keys).where(project_id: id).
each {|row| keys[row.project_access] << [row.identifier] }
keys[UsersProject::REPORTER] += deploy_keys.pluck(:identifier)
keys
end end
def allow_read_for?(user) def allow_read_for?(user)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment