Patch #7444 » issue-permissions-1.0.4.patch
redmine-1.0.4-issue-permissions/app/controllers/issues_controller.rb 2011-01-21 16:46:05.469555300 -0700 | ||
---|---|---|
103 | 103 |
@changesets = @issue.changesets.visible.all |
104 | 104 |
@changesets.reverse! if User.current.wants_comments_in_reverse_order? |
105 | 105 |
@allowed_statuses = @issue.new_statuses_allowed_to(User.current) |
106 |
@edit_allowed = User.current.allowed_to?(:edit_issues, @project) |
|
106 |
@edit_allowed = @issue.editable? |
|
107 |
@edit_planning_allowed = @issue.planning_editable? |
|
107 | 108 |
@priorities = IssuePriority.all |
108 | 109 |
@time_entry = TimeEntry.new |
109 | 110 |
respond_to do |format| |
... | ... | |
267 | 268 |
def update_issue_from_params |
268 | 269 |
@allowed_statuses = @issue.new_statuses_allowed_to(User.current) |
269 | 270 |
@priorities = IssuePriority.all |
270 |
@edit_allowed = User.current.allowed_to?(:edit_issues, @project) |
|
271 |
@edit_allowed = @issue.editable? |
|
272 |
@edit_planning_allowed = @issue.planning_editable? |
|
271 | 273 |
@time_entry = TimeEntry.new |
272 | 274 |
|
273 | 275 |
@notes = params[:notes] || (params[:issue].present? ? params[:issue][:notes] : nil) |
redmine-1.0.4-issue-permissions/app/models/issue.rb 2011-01-21 16:46:05.469555300 -0700 | ||
---|---|---|
78 | 78 |
(usr || User.current).allowed_to?(:view_issues, self.project) |
79 | 79 |
end |
80 | 80 |
|
81 |
# Returns true if usr or current user is allowed to edit the issue |
|
82 |
def editable?(usr=nil) |
|
83 |
user = usr || User.current |
|
84 |
return user.allowed_to?(:edit_issues, self.project) || |
|
85 |
(user.allowed_to?(:edit_own_issues, self.project) && self.assigned_to == user) || |
|
86 |
(user.allowed_to?(:edit_own_issues, self.project) && self.author == user && self.assigned_to.nil?) |
|
87 |
end |
|
88 |
|
|
89 |
def descr_editable?(usr=nil) |
|
90 |
user = usr || User.current |
|
91 |
return user.allowed_to?(:edit_issues, self.project) || |
|
92 |
(user.allowed_to?(:edit_own_issues, self.project) && self.author == user && self.assigned_to.nil?) |
|
93 |
end |
|
94 |
|
|
95 |
def planning_editable?(usr=nil) |
|
96 |
user = usr || User.current |
|
97 |
return editable?(user) && user.allowed_to?(:edit_issue_planning, self.project) |
|
98 |
end |
|
99 |
|
|
81 | 100 |
def after_initialize |
82 | 101 |
if new_record? |
83 | 102 |
# set default values for new records only |
redmine-1.0.4-issue-permissions/app/models/mail_handler.rb 2011-01-21 16:46:05.485181000 -0700 | ||
---|---|---|
174 | 174 |
return unless issue |
175 | 175 |
# check permission |
176 | 176 |
unless @@handler_options[:no_permission_check] |
177 |
raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) || user.allowed_to?(:edit_issues, issue.project) |
|
178 |
raise UnauthorizedAction unless status.nil? || user.allowed_to?(:edit_issues, issue.project) |
|
177 |
raise UnauthorizedAction unless user.allowed_to?(:add_issue_notes, issue.project) |
|
178 |
raise UnauthorizedAction unless issue.editable?(user) |
|
179 |
raise UnauthorizedAction unless status.nil? |
|
179 | 180 |
end |
180 | 181 |
|
181 | 182 |
# add the note |
redmine-1.0.4-issue-permissions/app/views/issues/_attributes.rhtml 2011-01-21 17:09:38.732206700 -0700 | ||
---|---|---|
8 | 8 |
<% end %> |
9 | 9 |
|
10 | 10 |
<p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), {:required => true}, :disabled => !@issue.leaf? %></p> |
11 |
<p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %></p>
|
|
11 |
<p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), {:include_blank => true}, :disabled => !@issue.planning_editable? %></p>
|
|
12 | 12 |
<% unless @project.issue_categories.empty? %> |
13 | 13 |
<p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %> |
14 | 14 |
<%= prompt_to_remote(image_tag('add.png', :style => 'vertical-align: middle;'), |
... | ... | |
19 | 19 |
:tabindex => 199) if authorize_for('issue_categories', 'new') %></p> |
20 | 20 |
<% end %> |
21 | 21 |
<% unless @issue.assignable_versions.empty? %> |
22 |
<p><%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), :include_blank => true %>
|
|
22 |
<p><%= f.select :fixed_version_id, version_options_for_select(@issue.assignable_versions, @issue.fixed_version), {:include_blank => true}, :disabled => !@issue.planning_editable? %>
|
|
23 | 23 |
<%= prompt_to_remote(image_tag('add.png', :style => 'vertical-align: middle;'), |
24 | 24 |
l(:label_version_new), |
25 | 25 |
'version[name]', |
... | ... | |
31 | 31 |
</div> |
32 | 32 |
|
33 | 33 |
<div class="splitcontentright"> |
34 |
<p><%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_start_date') if @issue.leaf? %></p>
|
|
35 |
<p><%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf? %><%= calendar_for('issue_due_date') if @issue.leaf? %></p>
|
|
36 |
<p><%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf? %> <%= l(:field_hours) %></p> |
|
34 |
<p><%= f.text_field :start_date, :size => 10, :disabled => !@issue.leaf? || !@issue.planning_editable? %><%= calendar_for('issue_start_date') if @issue.leaf? && @issue.planning_editable? %></p>
|
|
35 |
<p><%= f.text_field :due_date, :size => 10, :disabled => !@issue.leaf? || !@issue.planning_editable? %><%= calendar_for('issue_due_date') if @issue.leaf? && @issue.planning_editable? %></p>
|
|
36 |
<p><%= f.text_field :estimated_hours, :size => 3, :disabled => !@issue.leaf? || !@issue.planning_editable? %> <%= l(:field_hours) %></p>
|
|
37 | 37 |
<% if @issue.leaf? && Issue.use_field_for_done_ratio? %> |
38 |
<p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p> |
|
38 |
<p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }), {},:disabled => !@issue.planning_editable? %></p>
|
|
39 | 39 |
<% end %> |
40 | 40 |
</div> |
41 | 41 |
|
redmine-1.0.4-issue-permissions/app/views/issues/_edit.rhtml 2011-01-21 16:46:05.500806700 -0700 | ||
---|---|---|
6 | 6 |
:multipart => true} do |f| %> |
7 | 7 |
<%= error_messages_for 'issue', 'time_entry' %> |
8 | 8 |
<div class="box"> |
9 |
<% if @edit_allowed || !@allowed_statuses.empty? %>
|
|
9 |
<% if @edit_allowed %> |
|
10 | 10 |
<fieldset class="tabular"><legend><%= l(:label_change_properties) %> |
11 |
<% if !@issue.new_record? && !@issue.errors.any? && @edit_allowed %>
|
|
11 |
<% if !@issue.new_record? && !@issue.errors.any? && @issue.descr_editable? %>
|
|
12 | 12 |
<small>(<%= link_to l(:label_more), {}, :onclick => 'Effect.toggle("issue_descr_fields", "appear", {duration:0.3}); return false;' %>)</small> |
13 | 13 |
<% end %> |
14 | 14 |
</legend> |
15 |
<%= render :partial => (@edit_allowed ? 'form' : 'form_update'), :locals => {:f => f} %>
|
|
15 |
<%= render :partial => 'form', :locals => {:f => f} %>
|
|
16 | 16 |
</fieldset> |
17 | 17 |
<% end %> |
18 | 18 |
<% if authorize_for('timelog', 'edit') %> |
redmine-1.0.4-issue-permissions/app/views/issues/_form_update.rhtml 2011-01-21 16:46:05.516432400 -0700 | ||
---|---|---|
1 | 1 |
<div class="attributes"> |
2 | 2 |
<div class="splitcontentleft"> |
3 | 3 |
<p><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), :required => true %></p> |
4 |
<p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %></p> |
|
4 |
<p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true, :disabled => !@issue.planning_editable? %></p>
|
|
5 | 5 |
</div> |
6 | 6 |
<div class="splitcontentright"> |
7 | 7 |
<% if Issue.use_field_for_done_ratio? %> |
8 |
<p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p>
|
|
8 |
<p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10]}), :disabled => !@issue.planning_editable? %></p>
|
|
9 | 9 |
<% end %> |
10 |
<% unless @issue.assignable_versions.empty? %> |
|
11 |
<p><%= f.select :fixed_version_id, (@issue.assignable_versions.collect {|v| [v.name, v.id]}), :include_blank => true %></p>
|
|
10 |
<% unless @issue.fixed_assignable_versions.empty? %>
|
|
11 |
<p><%= f.select :fixed_version_id, (@issue.fixed_assignable_versions.collect {|v| [v.name, v.id]}), :include_blank => true, :disabled => !@issue.planning_editable? %></p>
|
|
12 | 12 |
<% end %> |
13 | 13 |
</div> |
14 | 14 |
</div> |
redmine-1.0.4-issue-permissions/config/locales/en.yml 2011-01-21 16:46:05.516432400 -0700 | ||
---|---|---|
362 | 362 |
permission_view_issues: View Issues |
363 | 363 |
permission_add_issues: Add issues |
364 | 364 |
permission_edit_issues: Edit issues |
365 |
permission_edit_own_issues: Edit own issues |
|
366 |
permission_edit_issue_planning: Edit issue planning |
|
365 | 367 |
permission_manage_issue_relations: Manage issue relations |
366 | 368 |
permission_add_issue_notes: Add notes |
367 | 369 |
permission_edit_issue_notes: Edit notes |
redmine-1.0.4-issue-permissions/lib/redmine/default_data/loader.rb 2011-01-21 16:46:05.532058100 -0700 | ||
---|---|---|
52 | 52 |
:view_issues, |
53 | 53 |
:add_issues, |
54 | 54 |
:edit_issues, |
55 |
:edit_issue_planning, |
|
55 | 56 |
:manage_issue_relations, |
56 | 57 |
:manage_subtasks, |
57 | 58 |
:add_issue_notes, |
... | ... | |
79 | 80 |
:permissions => [:view_issues, |
80 | 81 |
:add_issues, |
81 | 82 |
:add_issue_notes, |
83 |
:edit_own_issues, |
|
82 | 84 |
:save_queries, |
83 | 85 |
:view_gantt, |
84 | 86 |
:view_calendar, |
redmine-1.0.4-issue-permissions/lib/redmine.rb 2011-01-21 16:46:05.532058100 -0700 | ||
---|---|---|
66 | 66 |
:reports => [:issue_report, :issue_report_details]} |
67 | 67 |
map.permission :add_issues, {:issues => [:new, :create, :update_form]} |
68 | 68 |
map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]} |
69 |
map.permission :edit_own_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]} |
|
70 |
map.permission :edit_issue_planning, {:issues => [:edit, :update, :bulk_edit, :bulk_update, :update_form], :journals => [:new]} |
|
69 | 71 |
map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]} |
70 | 72 |
map.permission :manage_subtasks, {} |
71 | 73 |
map.permission :add_issue_notes, {:issues => [:edit, :update], :journals => [:new]} |