]> source.dussan.org Git - redmine.git/commitdiff
Edit/delete links displayed on issue even if project is closed (#23969).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 2 Oct 2016 11:00:08 +0000 (11:00 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 2 Oct 2016 11:00:08 +0000 (11:00 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@15879 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
test/functional/issues_controller_test.rb
test/unit/issue_test.rb

index aca55775eef7e79d2c2bdefe4fee813f3d4b3d24..92cfad3957031c11c92e7d8175570672d127c8b3 100644 (file)
@@ -1436,6 +1436,11 @@ class Issue < ActiveRecord::Base
   private
 
   def user_tracker_permission?(user, permission)
+    if project && !project.active?
+      perm = Redmine::AccessControl.permission(permission)
+      return false unless perm && perm.read?
+    end
+
     if user.admin?
       true
     else
index 49f6ea98662735178feff5babb03a08c41df4b64..47ab36de3f2d94f1e340daeb2c3310afdbb58a84 100644 (file)
@@ -1679,6 +1679,25 @@ class IssuesControllerTest < Redmine::ControllerTest
     assert_response 404
   end
 
+  def test_show_on_active_project_should_display_edit_links
+    @request.session[:user_id] = 1
+
+    get :show, :id => 1
+    assert_response :success
+    assert_select 'a', :text => 'Edit'
+    assert_select 'a', :text => 'Delete'
+  end
+
+  def test_show_on_closed_project_should_not_display_edit_links
+    Issue.find(1).project.close
+    @request.session[:user_id] = 1
+
+    get :show, :id => 1
+    assert_response :success
+    assert_select 'a', :text => 'Edit', :count => 0
+    assert_select 'a', :text => 'Delete', :count => 0
+  end
+
   def test_get_new
     @request.session[:user_id] = 2
     get :new, :project_id => 1, :tracker_id => 1
index d119b5fe6006ee1aab6b088b1d4a963395e3226e..fe056a70ed485f7cbf6c7fb167cd0ca8680a6bbe 100644 (file)
@@ -519,6 +519,22 @@ class IssueTest < ActiveSupport::TestCase
     assert_equal [issue], Issue.assigned_to(user).to_a
   end
 
+  def test_issue_should_be_readonly_on_closed_project
+    issue = Issue.find(1)
+    user = User.find(1)
+
+    assert_equal true, issue.visible?(user)
+    assert_equal true, issue.editable?(user)
+    assert_equal true, issue.deletable?(user)
+
+    issue.project.close
+    issue.reload
+
+    assert_equal true, issue.visible?(user)
+    assert_equal false, issue.editable?(user)
+    assert_equal false, issue.deletable?(user)
+  end
+
   def test_errors_full_messages_should_include_custom_fields_errors
     field = IssueCustomField.find_by_name('Database')