瀏覽代碼

Don't preload projects and roles on Principal#memberships association (#23519).

Patch by Ondřej Ezr.

git-svn-id: http://svn.redmine.org/redmine/trunk@16153 e93f8b46-1217-0410-a6f0-8f06a7374b81
tags/3.4.0
Jean-Philippe Lang 7 年之前
父節點
當前提交
3deb70d4aa
共有 4 個檔案被更改,包括 11 行新增8 行删除
  1. 1
    1
      app/controllers/users_controller.rb
  2. 1
    2
      app/models/principal.rb
  3. 7
    3
      app/models/user.rb
  4. 2
    2
      app/views/groups/show.api.rsb

+ 1
- 1
app/controllers/users_controller.rb 查看文件

@@ -69,7 +69,7 @@ class UsersController < ApplicationController
end

# show projects based on current user visibility
@memberships = @user.memberships.where(Project.visible_condition(User.current)).to_a
@memberships = @user.memberships.preload(:roles, :project).where(Project.visible_condition(User.current)).to_a

respond_to do |format|
format.html {

+ 1
- 2
app/models/principal.rb 查看文件

@@ -28,8 +28,7 @@ class Principal < ActiveRecord::Base

has_many :members, :foreign_key => 'user_id', :dependent => :destroy
has_many :memberships,
lambda {preload(:project, :roles).
joins(:project).
lambda {joins(:project).
where("#{Project.table_name}.status<>#{Project::STATUS_ARCHIVED}")},
:class_name => 'Member',
:foreign_key => 'user_id'

+ 7
- 3
app/models/user.rb 查看文件

@@ -546,6 +546,10 @@ class User < Principal
@membership_by_project_id[project_id]
end

def roles
@roles ||= Role.joins(members: :project).where(["#{Project.table_name}.status <> ?", Project::STATUS_ARCHIVED]).where(Member.arel_table[:user_id].eq(id)).uniq
end

# Returns the user's bult-in role
def builtin_role
@builtin_role ||= Role.non_member
@@ -673,9 +677,9 @@ class User < Principal
return true if admin?

# authorize if user has at least one role that has this permission
roles = memberships.collect {|m| m.roles}.flatten.uniq
roles << (self.logged? ? Role.non_member : Role.anonymous)
roles.any? {|role|
rls = self.roles.to_a
rls << builtin_role
rls.any? {|role|
role.allowed_to?(action) &&
(block_given? ? yield(role, self) : true)
}

+ 2
- 2
app/views/groups/show.api.rsb 查看文件

@@ -12,7 +12,7 @@ api.group do
end if include_in_api_response?('users') && !@group.builtin?

api.array :memberships do
@group.memberships.each do |membership|
@group.memberships.preload(:roles, :project).each do |membership|
api.membership do
api.id membership.id
api.project :id => membership.project.id, :name => membership.project.name
@@ -22,7 +22,7 @@ api.group do
attrs = {:id => member_role.role.id, :name => member_role.role.name}
attrs.merge!(:inherited => true) if member_role.inherited_from.present?
api.role attrs
end
end
end
end
end if membership.project

Loading…
取消
儲存