Patch #23519 » memberships_performance.diff
app/controllers/users_controller.rb | ||
---|---|---|
68 | 68 |
end |
69 | 69 | |
70 | 70 |
# show projects based on current user visibility |
71 |
@memberships = @user.memberships.where(Project.visible_condition(User.current)).to_a |
|
71 |
@memberships = @user.memberships.preload(:roles, :project).where(Project.visible_condition(User.current)).to_a
|
|
72 | 72 | |
73 | 73 |
respond_to do |format| |
74 | 74 |
format.html { |
app/models/principal.rb | ||
---|---|---|
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' |
app/models/user.rb | ||
---|---|---|
544 | 544 |
@membership_by_project_id[project_id] |
545 | 545 |
end |
546 | 546 | |
547 |
def roles |
|
548 |
@roles ||= Role.joins(members: :project).where(["#{Project.table_name}.status <> ?", Project::STATUS_ARCHIVED]).where(Member.arel_table[:user_id].eq(id)).uniq |
|
549 |
end |
|
550 | ||
547 | 551 |
# Returns the user's bult-in role |
548 | 552 |
def builtin_role |
549 | 553 |
@builtin_role ||= Role.non_member |
... | ... | |
584 | 588 |
end |
585 | 589 |
end |
586 | 590 |
end |
587 |
|
|
591 | ||
588 | 592 |
hash.each do |role, projects| |
589 | 593 |
projects.uniq! |
590 | 594 |
end |
... | ... | |
653 | 657 |
return true if admin? |
654 | 658 | |
655 | 659 |
# authorize if user has at least one role that has this permission |
656 |
roles = memberships.collect {|m| m.roles}.flatten.uniq
|
|
657 |
roles << (self.logged? ? Role.non_member : Role.anonymous)
|
|
658 |
roles.any? {|role|
|
|
660 |
rls = roles.to_a
|
|
661 |
rls << builtin_role
|
|
662 |
rls.any? {|role|
|
|
659 | 663 |
role.allowed_to?(action) && |
660 | 664 |
(block_given? ? yield(role, self) : true) |
661 | 665 |
} |
app/views/groups/show.api.rsb | ||
---|---|---|
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 | 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 |
- « Previous
- 1
- 2
- Next »