Performance: avoid querying all memberships in User#roles_for_project (#13301).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11508 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
+13
-1
@@ -132,6 +132,7 @@ class User < Principal
|
||||
def reload(*args)
|
||||
@name = nil
|
||||
@projects_by_role = nil
|
||||
@membership_by_project_id = nil
|
||||
base_reload(*args)
|
||||
end
|
||||
|
||||
@@ -419,6 +420,17 @@ class User < Principal
|
||||
!logged?
|
||||
end
|
||||
|
||||
# Returns user's membership for the given project
|
||||
# or nil if the user is not a member of project
|
||||
def membership(project)
|
||||
project_id = project.is_a?(Project) ? project.id : project
|
||||
|
||||
@membership_by_project_id ||= Hash.new {|h, project_id|
|
||||
h[project_id] = memberships.where(:project_id => project_id).first
|
||||
}
|
||||
@membership_by_project_id[project_id]
|
||||
end
|
||||
|
||||
# Return user's roles for project
|
||||
def roles_for_project(project)
|
||||
roles = []
|
||||
@@ -426,7 +438,7 @@ class User < Principal
|
||||
return roles if project.nil? || project.archived?
|
||||
if logged?
|
||||
# Find project membership
|
||||
membership = memberships.detect {|m| m.project_id == project.id}
|
||||
membership = membership(project)
|
||||
if membership
|
||||
roles = membership.roles
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user