Commit d02ddeff authored by Jean-Philippe Lang's avatar Jean-Philippe Lang

Fixed: parent project field doesn't include blank value when a member with 'add…

Fixed: parent project field doesn't include blank value when a member with 'add subproject' permission edits a child project (#4790).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3405 e93f8b46-1217-0410-a6f0-8f06a7374b81
parent a8a49a26
......@@ -249,7 +249,7 @@ class Project < ActiveRecord::Base
return @allowed_parents if @allowed_parents
@allowed_parents = Project.find(:all, :conditions => Project.allowed_to_condition(User.current, :add_subprojects))
@allowed_parents = @allowed_parents - self_and_descendants
if User.current.allowed_to?(:add_project, nil, :global => true)
if User.current.allowed_to?(:add_project, nil, :global => true) || (!new_record? && parent.nil?)
@allowed_parents << nil
end
unless parent.nil? || @allowed_parents.empty? || @allowed_parents.include?(parent)
......
......@@ -285,6 +285,48 @@ class ProjectTest < ActiveSupport::TestCase
assert Project.new.allowed_parents.compact.empty?
end
def test_allowed_parents_with_add_subprojects_permission
Role.find(1).remove_permission!(:add_project)
Role.find(1).add_permission!(:add_subprojects)
User.current = User.find(2)
# new project
assert !Project.new.allowed_parents.include?(nil)
assert Project.new.allowed_parents.include?(Project.find(1))
# existing root project
assert Project.find(1).allowed_parents.include?(nil)
# existing child
assert Project.find(3).allowed_parents.include?(Project.find(1))
assert !Project.find(3).allowed_parents.include?(nil)
end
def test_allowed_parents_with_add_project_permission
Role.find(1).add_permission!(:add_project)
Role.find(1).remove_permission!(:add_subprojects)
User.current = User.find(2)
# new project
assert Project.new.allowed_parents.include?(nil)
assert !Project.new.allowed_parents.include?(Project.find(1))
# existing root project
assert Project.find(1).allowed_parents.include?(nil)
# existing child
assert Project.find(3).allowed_parents.include?(Project.find(1))
assert Project.find(3).allowed_parents.include?(nil)
end
def test_allowed_parents_with_add_project_and_subprojects_permission
Role.find(1).add_permission!(:add_project)
Role.find(1).add_permission!(:add_subprojects)
User.current = User.find(2)
# new project
assert Project.new.allowed_parents.include?(nil)
assert Project.new.allowed_parents.include?(Project.find(1))
# existing root project
assert Project.find(1).allowed_parents.include?(nil)
# existing child
assert Project.find(3).allowed_parents.include?(Project.find(1))
assert Project.find(3).allowed_parents.include?(nil)
end
def test_users_by_role
users_by_role = Project.find(1).users_by_role
assert_kind_of Hash, users_by_role
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment