]> source.dussan.org Git - redmine.git/commitdiff
Merged r21142 to 4.2-stable (#35634).
authorMarius Balteanu <marius.balteanu@zitec.com>
Fri, 6 Aug 2021 06:59:45 +0000 (06:59 +0000)
committerMarius Balteanu <marius.balteanu@zitec.com>
Fri, 6 Aug 2021 06:59:45 +0000 (06:59 +0000)
git-svn-id: http://svn.redmine.org/redmine/branches/4.2-stable@21144 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
test/functional/attachments_controller_test.rb
test/functional/issues_controller_test.rb

index e5bb30e25344e1b2628529d25e53aef26cd5ffd2..c258065b255f92351c70c52e0d1ed87a1729f9c7 100644 (file)
@@ -209,6 +209,11 @@ class Issue < ActiveRecord::Base
     user_tracker_permission?(user, :delete_issues)
   end
 
+  # Overrides Redmine::Acts::Attachable::InstanceMethods#attachments_deletable?
+  def attachments_deletable?(user=User.current)
+    attributes_editable?(user)
+  end
+
   def initialize(attributes=nil, *args)
     super
     if new_record?
index e7f6d3a2f542556d9c478153d75851f59eccb20e..08ebe25bf031c39fdcab82686fb91af053198d24 100644 (file)
@@ -744,4 +744,25 @@ class AttachmentsControllerTest < Redmine::ControllerTest
     assert_response 302
     assert Attachment.find_by_id(3)
   end
+
+  def test_destroy_issue_attachment_by_user_without_edit_issue_permission_on_tracker
+    role = Role.find(2)
+    role.set_permission_trackers 'edit_issues', [2, 3]
+    role.save!
+
+    @request.session[:user_id] = 2
+
+    set_tmp_attachments_directory
+    assert_no_difference 'Attachment.count' do
+      delete(
+        :destroy,
+        :params => {
+          :id => 7
+        }
+      )
+    end
+
+    assert_response 403
+    assert Attachment.find_by_id(7)
+  end
 end
index 6184540057a9605b0e153fcfda5a8630ab57d8b3..686c617a22361b998789b6def1b2dbae2c323123 100644 (file)
@@ -3161,6 +3161,19 @@ class IssuesControllerTest < Redmine::ControllerTest
       assert_select 'div.attachments .icon-edit',  0
   end
 
+  def test_show_should_not_display_delete_attachment_icon_for_user_without_edit_issue_permission_on_tracker
+    role = Role.find(2)
+    role.set_permission_trackers 'edit_issues', [2, 3]
+    role.save!
+
+    @request.session[:user_id] = 2
+
+    get :show, params: {id: 4}
+
+    assert_response :success
+    assert_select 'div.attachments .icon-del', 0
+  end
+
   def test_get_new
     @request.session[:user_id] = 2
     get(