summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/helpers/issues_helper.rb16
-rw-r--r--test/functional/issues_controller_test.rb20
2 files changed, 31 insertions, 5 deletions
diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index b8e1dd414..4ca0cbbd1 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -750,12 +750,18 @@ module IssuesHelper
end
def projects_for_select(issue)
- if issue.parent_issue_id.present?
- issue.allowed_target_projects_for_subtask(User.current)
- elsif @project && issue.new_record? && !issue.copy?
- issue.allowed_target_projects(User.current, 'tree')
+ projects =
+ if issue.parent_issue_id.present?
+ issue.allowed_target_projects_for_subtask(User.current)
+ elsif @project && issue.new_record? && !issue.copy?
+ issue.allowed_target_projects(User.current, 'tree')
+ else
+ issue.allowed_target_projects(User.current)
+ end
+ if issue.read_only_attribute_names(User.current).include?('project_id')
+ params['project_id'].present? ? Project.where(identifier: params['project_id']) : projects
else
- issue.allowed_target_projects(User.current)
+ projects
end
end
end
diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb
index 59d071b0a..3e454ffd2 100644
--- a/test/functional/issues_controller_test.rb
+++ b/test/functional/issues_controller_test.rb
@@ -5586,6 +5586,26 @@ class IssuesControllerTest < Redmine::ControllerTest
assert_select 'select[name=?]', 'issue[project_id]', 0
end
+ def test_new_should_hide_project_if_user_is_not_allowed_to_change_project_in_hierarchy_projects
+ WorkflowPermission.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1,
+ :field_name => 'project_id', :rule => 'readonly')
+
+ @request.session[:user_id] = 2
+ get(:new, :params => { :tracker_id => 1, :project_id => 1 })
+ assert_response :success
+ assert_select 'select[name=?]', 'issue[project_id]', 0
+ end
+
+ def test_new_should_show_project_if_user_is_not_allowed_to_change_project_global_new_issue
+ WorkflowPermission.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1,
+ :field_name => 'project_id', :rule => 'readonly')
+
+ @request.session[:user_id] = 2
+ get(:new, :params => { :tracker_id => 1})
+ assert_response :success
+ assert_select 'select[name=?]', 'issue[project_id]'
+ end
+
def test_edit_should_not_hide_project_when_user_changes_the_project_even_if_project_is_readonly_on_target_project
WorkflowPermission.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1,
:field_name => 'project_id', :rule => 'readonly')