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 »