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