@@ -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 { |
|
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 |
r |
|
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