##// END OF EJS Templates
Don't preload projects and roles on Principal#memberships association (#23519)....
Jean-Philippe Lang -
r15771:3deb70d4aab9
parent child
Show More
@@ -69,7 +69,7 class UsersController < ApplicationController
69 69 end
70 70
71 71 # show projects based on current user visibility
72 @memberships = @user.memberships.where(Project.visible_condition(User.current)).to_a
72 @memberships = @user.memberships.preload(:roles, :project).where(Project.visible_condition(User.current)).to_a
73 73
74 74 respond_to do |format|
75 75 format.html {
@@ -28,8 +28,7 class Principal < ActiveRecord::Base
28 28
29 29 has_many :members, :foreign_key => 'user_id', :dependent => :destroy
30 30 has_many :memberships,
31 lambda {preload(:project, :roles).
32 joins(:project).
31 lambda {joins(:project).
33 32 where("#{Project.table_name}.status<>#{Project::STATUS_ARCHIVED}")},
34 33 :class_name => 'Member',
35 34 :foreign_key => 'user_id'
@@ -546,6 +546,10 class User < Principal
546 546 @membership_by_project_id[project_id]
547 547 end
548 548
549 def roles
550 @roles ||= Role.joins(members: :project).where(["#{Project.table_name}.status <> ?", Project::STATUS_ARCHIVED]).where(Member.arel_table[:user_id].eq(id)).uniq
551 end
552
549 553 # Returns the user's bult-in role
550 554 def builtin_role
551 555 @builtin_role ||= Role.non_member
@@ -673,9 +677,9 class User < Principal
673 677 return true if admin?
674 678
675 679 # authorize if user has at least one role that has this permission
676 roles = memberships.collect {|m| m.roles}.flatten.uniq
677 roles << (self.logged? ? Role.non_member : Role.anonymous)
678 roles.any? {|role|
680 rls = self.roles.to_a
681 rls << builtin_role
682 rls.any? {|role|
679 683 role.allowed_to?(action) &&
680 684 (block_given? ? yield(role, self) : true)
681 685 }
@@ -12,7 +12,7 api.group do
12 12 end if include_in_api_response?('users') && !@group.builtin?
13 13
14 14 api.array :memberships do
15 @group.memberships.each do |membership|
15 @group.memberships.preload(:roles, :project).each do |membership|
16 16 api.membership do
17 17 api.id membership.id
18 18 api.project :id => membership.project.id, :name => membership.project.name
@@ -22,7 +22,7 api.group do
22 22 attrs = {:id => member_role.role.id, :name => member_role.role.name}
23 23 attrs.merge!(:inherited => true) if member_role.inherited_from.present?
24 24 api.role attrs
25 end
25 end
26 26 end
27 27 end
28 28 end if membership.project
General Comments 0
You need to be logged in to leave comments. Login now