##// END OF EJS Templates
Removed :move_issues permission (#18855)....
Jean-Philippe Lang -
r13599:01f673be08be
parent child
Show More
@@ -0,0 +1,18
1 class ReplaceMoveIssuesPermission < ActiveRecord::Migration
2 def self.up
3 Role.all.each do |role|
4 if role.has_permission?(:edit_issues) && !role.has_permission?(:move_issues)
5 # inserts one ligne per trakcer and status
6 WorkflowPermission.connection.insert_sql(
7 "INSERT INTO #{WorkflowPermission.table_name} (tracker_id, old_status_id, role_id, type, field_name, rule)" +
8 " SELECT t.id, s.id, #{role.id}, 'WorkflowPermission', 'project_id', 'readonly'" +
9 " FROM #{Tracker.table_name} t, #{IssueStatus.table_name} s"
10 )
11 end
12 end
13 end
14
15 def self.down
16 raise IrreversibleMigration
17 end
18 end
@@ -31,8 +31,7 class ContextMenusController < ApplicationController
31 31
32 32 @can = {:edit => User.current.allowed_to?(:edit_issues, @projects),
33 33 :log_time => (@project && User.current.allowed_to?(:log_time, @project)),
34 :move => (@project && User.current.allowed_to?(:move_issues, @project)),
35 :copy => (@issue && @project.trackers.include?(@issue.tracker) && User.current.allowed_to?(:add_issues, @project)),
34 :copy => User.current.allowed_to?(:add_issues, @projects),
36 35 :delete => User.current.allowed_to?(:delete_issues, @projects)
37 36 }
38 37 if @project
@@ -219,13 +219,11 class IssuesController < ApplicationController
219 219 @copy = params[:copy].present?
220 220 @notes = params[:notes]
221 221
222 if User.current.allowed_to?(:move_issues, @projects)
223 @allowed_projects = Issue.allowed_target_projects_on_move
224 if params[:issue]
225 @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:issue][:project_id].to_s}
226 if @target_project
227 target_projects = [@target_project]
228 end
222 @allowed_projects = Issue.allowed_target_projects
223 if params[:issue]
224 @target_project = @allowed_projects.detect {|p| p.id.to_s == params[:issue][:project_id].to_s}
225 if @target_project
226 target_projects = [@target_project]
229 227 end
230 228 end
231 229 target_projects ||= @projects
@@ -378,8 +378,8 class Issue < ActiveRecord::Base
378 378 :if => lambda {|issue, user|
379 379 if issue.new_record?
380 380 issue.copy?
381 elsif user.allowed_to?(:move_issues, issue.project)
382 Issue.allowed_target_projects_on_move.count > 1
381 else
382 user.allowed_to?(:edit_issues, issue.project)
383 383 end
384 384 }
385 385
@@ -1282,16 +1282,18 class Issue < ActiveRecord::Base
1282 1282
1283 1283 # Returns a scope of projects that user can assign the issue to
1284 1284 def allowed_target_projects(user=User.current)
1285 if new_record?
1286 Project.where(Project.allowed_to_condition(user, :add_issues))
1287 else
1288 self.class.allowed_target_projects_on_move(user)
1289 end
1285 current_project = new_record? ? nil : project
1286 self.class.allowed_target_projects(user, current_project)
1290 1287 end
1291 1288
1292 # Returns a scope of projects that user can move issues to
1293 def self.allowed_target_projects_on_move(user=User.current)
1294 Project.where(Project.allowed_to_condition(user, :move_issues))
1289 # Returns a scope of projects that user can assign issues to
1290 # If current_project is given, it will be included in the scope
1291 def self.allowed_target_projects(user=User.current, current_project=nil)
1292 condition = Project.allowed_to_condition(user, :add_issues)
1293 if current_project
1294 condition = ["(#{condition}) OR #{Project.table_name}.id = ?", current_project.id]
1295 end
1296 Project.where(condition)
1295 1297 end
1296 1298
1297 1299 private
@@ -130,7 +130,7
130 130 :class => 'icon-copy', :disabled => !@can[:copy] %></li>
131 131 <% else %>
132 132 <li><%= context_menu_link l(:button_copy), bulk_edit_issues_path(:ids => @issue_ids, :copy => '1'),
133 :class => 'icon-copy', :disabled => !@can[:move] %></li>
133 :class => 'icon-copy', :disabled => !@can[:copy] %></li>
134 134 <% end %>
135 135 <li><%= context_menu_link l(:button_delete), issues_path(:ids => @issue_ids, :back_url => @back),
136 136 :method => :delete, :data => {:confirm => issues_destroy_confirmation_message(@issues)}, :class => 'icon-del', :disabled => !@can[:delete] %></li>
@@ -109,7 +109,6 Redmine::AccessControl.map do |map|
109 109 map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
110 110 map.permission :view_private_notes, {}, :read => true, :require => :member
111 111 map.permission :set_notes_private, {}, :require => :member
112 map.permission :move_issues, {:issues => [:bulk_edit, :bulk_update]}, :require => :loggedin
113 112 map.permission :delete_issues, {:issues => :destroy}, :require => :member
114 113 # Queries
115 114 map.permission :manage_public_queries, {:queries => [:new, :create, :edit, :update, :destroy]}, :require => :member
@@ -20,7 +20,6 roles_001:
20 20 - :manage_issue_relations
21 21 - :manage_subtasks
22 22 - :add_issue_notes
23 - :move_issues
24 23 - :delete_issues
25 24 - :view_issue_watchers
26 25 - :add_issue_watchers
@@ -81,7 +80,6 roles_002:
81 80 - :manage_issue_relations
82 81 - :manage_subtasks
83 82 - :add_issue_notes
84 - :move_issues
85 83 - :delete_issues
86 84 - :view_issue_watchers
87 85 - :save_queries
@@ -128,7 +126,6 roles_003:
128 126 - :edit_issues
129 127 - :manage_issue_relations
130 128 - :add_issue_notes
131 - :move_issues
132 129 - :view_issue_watchers
133 130 - :save_queries
134 131 - :view_gantt
@@ -1211,13 +1211,13 class IssueTest < ActiveSupport::TestCase
1211 1211 assert issue.save
1212 1212 end
1213 1213
1214 def test_allowed_target_projects_on_move_should_include_projects_with_issue_tracking_enabled
1215 assert_include Project.find(2), Issue.allowed_target_projects_on_move(User.find(2))
1214 def test_allowed_target_projects_should_include_projects_with_issue_tracking_enabled
1215 assert_include Project.find(2), Issue.allowed_target_projects(User.find(2))
1216 1216 end
1217 1217
1218 def test_allowed_target_projects_on_move_should_not_include_projects_with_issue_tracking_disabled
1218 def test_allowed_target_projects_should_not_include_projects_with_issue_tracking_disabled
1219 1219 Project.find(2).disable_module! :issue_tracking
1220 assert_not_include Project.find(2), Issue.allowed_target_projects_on_move(User.find(2))
1220 assert_not_include Project.find(2), Issue.allowed_target_projects(User.find(2))
1221 1221 end
1222 1222
1223 1223 def test_move_to_another_project_with_same_category
General Comments 0
You need to be logged in to leave comments. Login now