Feature #17747 » private_role_redmine_3.0.patch
app/controllers/reports_controller.rb (working copy) | ||
---|---|---|
24 | 24 |
@versions = @project.shared_versions.sort |
25 | 25 |
@priorities = IssuePriority.all.reverse |
26 | 26 |
@categories = @project.issue_categories |
27 |
@assignees = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort |
|
28 |
@authors = @project.users.sort |
|
27 |
## begin patch private role |
|
28 |
#@assignees = (Setting.issue_group_assignment? ? @project.principals : @project.users).sort |
|
29 |
@assignees = (Setting.issue_group_assignment? ? @project.principals : @project.users.visible).sort |
|
30 |
#@authors = @project.users.sort |
|
31 |
@authors = @project.users.visible.sort |
|
32 |
## end patch private role |
|
29 | 33 |
@subprojects = @project.descendants.visible |
30 | 34 | |
31 | 35 |
@issues_by_tracker = Issue.by_tracker(@project) |
... | ... | |
40 | 44 |
end |
41 | 45 | |
42 | 46 |
def issue_report_details |
47 |
## begin patch private role |
|
43 | 48 |
case params[:detail] |
49 |
when "assigned_to", "author" |
|
50 |
unless User.current.admin? |
|
51 |
all_users = @project.users.active |
|
52 |
visible_users = all_users.visible |
|
53 |
if all_users.count != visible_users.count |
|
54 |
## report/assigned_to and report/author contains all users |
|
55 |
render_404 |
|
56 |
return |
|
57 |
end |
|
58 |
end |
|
59 |
end |
|
60 |
## end patch private role |
|
61 | ||
62 |
case params[:detail] |
|
44 | 63 |
when "tracker" |
45 | 64 |
@field = "tracker_id" |
46 | 65 |
@rows = @project.trackers |
app/controllers/users_controller.rb (working copy) | ||
---|---|---|
60 | 60 |
end |
61 | 61 | |
62 | 62 |
def show |
63 |
unless @user.visible? |
|
64 |
render_404 |
|
65 |
return |
|
66 |
end |
|
63 |
## begin patch private role (revert revision 13584 - if user with private role (or non-member?) acts on issue, user should be visible) |
|
64 |
#unless @user.visible? |
|
65 |
# render_404 |
|
66 |
# return |
|
67 |
#end |
|
68 |
## end patch private role |
|
67 | 69 | |
68 | 70 |
# show projects based on current user visibility |
69 | 71 |
@memberships = @user.memberships.where(Project.visible_condition(User.current)).to_a |
70 | 72 | |
73 |
## begin patch private role (revert revision 13584) |
|
74 |
unless User.current.admin? |
|
75 |
if !@user.active? || (@user != User.current && @memberships.empty? && events.empty?) |
|
76 |
render_404 |
|
77 |
return |
|
78 |
end |
|
79 |
end |
|
80 |
## end patch private role |
|
81 | ||
71 | 82 |
respond_to do |format| |
72 | 83 |
format.html { |
73 | 84 |
events = Redmine::Activity::Fetcher.new(User.current, :author => @user).events(nil, nil, :limit => 10) |
app/models/principal.rb (working copy) | ||
---|---|---|
55 | 55 |
active |
56 | 56 |
else |
57 | 57 |
# self and members of visible projects |
58 |
active.where("#{table_name}.id = ? OR #{table_name}.id IN (SELECT user_id FROM #{Member.table_name} WHERE project_id IN (?))", |
|
58 |
## begin patch private role |
|
59 |
#active.where("#{table_name}.id = ? OR #{table_name}.id IN (SELECT user_id FROM #{Member.table_name} WHERE project_id IN (?))", |
|
60 |
active.where("#{table_name}.id = ? OR #{table_name}.id IN (" + |
|
61 |
"SELECT m.user_id FROM #{Member.table_name} m" + |
|
62 |
" INNER JOIN #{MemberRole.table_name} mr ON m.id = mr.member_id" + |
|
63 |
" INNER JOIN #{Role.table_name} r ON mr.role_id = r.id" + |
|
64 |
" WHERE m.project_id IN (?) AND r.name NOT LIKE 'private.%')", |
|
65 |
## end patch private role |
|
59 | 66 |
user.id, user.visible_project_ids |
60 | 67 |
) |
61 | 68 |
end |
app/models/project.rb (working copy) | ||
---|---|---|
31 | 31 |
has_many :time_entry_activities |
32 | 32 |
has_many :members, |
33 | 33 |
lambda { joins(:principal, :roles). |
34 |
where("#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}") } |
|
34 |
## begin patch private role |
|
35 |
#where("#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE}")} |
|
36 |
where("#{Principal.table_name}.type='User' AND #{Principal.table_name}.status=#{Principal::STATUS_ACTIVE} AND #{Role.table_name}.name NOT LIKE 'private.%'")} |
|
37 |
## end patch private role |
|
35 | 38 |
has_many :memberships, :class_name => 'Member' |
36 | 39 |
has_many :member_principals, |
37 | 40 |
lambda { joins(:principal). |
... | ... | |
492 | 495 | |
493 | 496 |
@assignable_users ||= Principal. |
494 | 497 |
active. |
498 |
## begin patch private role |
|
499 |
visible. |
|
500 |
## end patch private role |
|
495 | 501 |
joins(:members => :roles). |
496 | 502 |
where(:type => types, :members => {:project_id => id}, :roles => {:assignable => true}). |
497 | 503 |
uniq. |
app/models/role.rb (working copy) | ||
---|---|---|
45 | 45 |
] |
46 | 46 | |
47 | 47 |
scope :sorted, lambda { order(:builtin, :position) } |
48 |
scope :givable, lambda { order(:position).where(:builtin => 0) } |
|
48 |
## begin patch private role |
|
49 |
#scope :givable, lambda { order(:position).where(:builtin => 0) } |
|
50 |
scope :givable, lambda { |
|
51 |
if User.current.admin? |
|
52 |
order(:position).where(:builtin => 0) |
|
53 |
else |
|
54 |
order(:position). |
|
55 |
where("#{table_name}.name NOT LIKE 'private.%'"). |
|
56 |
where(:builtin => 0) |
|
57 |
end |
|
58 |
} |
|
59 |
## end patch private role |
|
49 | 60 |
scope :builtin, lambda { |*args| |
50 | 61 |
compare = (args.first == true ? 'not' : '') |
51 | 62 |
where("#{compare} builtin = 0") |