]> source.dussan.org Git - redmine.git/commitdiff
New Permission: Edit own issue (#1248).
authorGo MAEDA <maeda@farend.jp>
Thu, 25 Apr 2019 05:32:58 +0000 (05:32 +0000)
committerGo MAEDA <maeda@farend.jp>
Thu, 25 Apr 2019 05:32:58 +0000 (05:32 +0000)
Patch by Yuichi HARADA.

git-svn-id: http://svn.redmine.org/redmine/trunk@18081 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
config/locales/en.yml
lib/redmine.rb
test/unit/issue_test.rb

index 3bccbb3483ba59fa6cf9bf7b5c5d08b0bbdd5161..1e0fbc43a11a322b18ed23d914a5d8b981059fe3 100644 (file)
@@ -180,7 +180,9 @@ class Issue < ActiveRecord::Base
 
   # Returns true if user or current user is allowed to edit the issue
   def attributes_editable?(user=User.current)
-    user_tracker_permission?(user, :edit_issues)
+    user_tracker_permission?(user, :edit_issues) || (
+      user_tracker_permission?(user, :edit_own_issues) && author == user
+    )
   end
 
   # Overrides Redmine::Acts::Attachable::InstanceMethods#attachments_editable?
index 4269e344eb8a99ac33637f29633cb838b0d68b44..680b5c9150a04e6b1702c0142591bc449b4c8bf8 100644 (file)
@@ -488,6 +488,7 @@ en:
   permission_view_issues: View Issues
   permission_add_issues: Add issues
   permission_edit_issues: Edit issues
+  permission_edit_own_issues: Edit own issues
   permission_copy_issues: Copy issues
   permission_manage_issue_relations: Manage issue relations
   permission_set_issues_private: Set issues public or private
index aa91a873faae0caf771fdc278b01c837103dc0bd..45e9f102423ecce0068c93934c9b38700d4cd911 100644 (file)
@@ -102,6 +102,7 @@ Redmine::AccessControl.map do |map|
                                   :read => true
     map.permission :add_issues, {:issues => [:new, :create], :attachments => :upload}
     map.permission :edit_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update], :journals => [:new], :attachments => :upload}
+    map.permission :edit_own_issues, {:issues => [:edit, :update, :bulk_edit, :bulk_update], :journals => [:new], :attachments => :upload}
     map.permission :copy_issues, {:issues => [:new, :create, :bulk_edit, :bulk_update], :attachments => :upload}
     map.permission :manage_issue_relations, {:issue_relations => [:index, :show, :create, :destroy]}
     map.permission :manage_subtasks, {}
index afd8d8c368790235e3c98a96dc6862d473a96bad..7ca0bbd36792584c73d32361a5a078869ecb26ee 100644 (file)
@@ -543,6 +543,23 @@ class IssueTest < ActiveSupport::TestCase
     assert_equal false, issue.deletable?(user)
   end
 
+  def test_issue_should_editable_by_author
+    Role.all.each do |r|
+      r.remove_permission! :edit_issues
+      r.add_permission! :edit_own_issues
+    end
+
+    issue = Issue.find(1)
+    user = User.find_by_login('jsmith')
+
+    # author
+    assert_equal user, issue.author
+    assert_equal true, issue.attributes_editable?(user)
+
+    # not author
+    assert_equal false, issue.attributes_editable?(User.find_by_login('dlopper'))
+  end
+
   def test_errors_full_messages_should_include_custom_fields_errors
     field = IssueCustomField.find_by_name('Database')