diff --git a/lib/guardian.rb b/lib/guardian.rb index 4a7589f875a..ad3ba547022 100644 --- a/lib/guardian.rb +++ b/lib/guardian.rb @@ -259,7 +259,7 @@ class Guardian end def can_edit_topic?(topic) - is_staff? || is_my_own?(topic) + !topic.archived && (is_staff? || is_my_own?(topic)) end # Deleting Methods diff --git a/spec/components/guardian_spec.rb b/spec/components/guardian_spec.rb index b28612b91f4..a5587cdc1c4 100644 --- a/spec/components/guardian_spec.rb +++ b/spec/components/guardian_spec.rb @@ -456,12 +456,24 @@ describe Guardian do Guardian.new(coding_horror).can_edit?(topic).should be_false end - it 'returns true as a moderator' do - Guardian.new(moderator).can_edit?(topic).should be_true + context 'not archived' do + it 'returns true as a moderator' do + Guardian.new(moderator).can_edit?(topic).should be_true + end + + it 'returns true as an admin' do + Guardian.new(admin).can_edit?(topic).should be_true + end end - it 'returns true as an admin' do - Guardian.new(admin).can_edit?(topic).should be_true + context 'archived' do + it 'returns false as a moderator' do + Guardian.new(moderator).can_edit?(build(:topic, user: user, archived: true)).should be_false + end + + it 'returns false as an admin' do + Guardian.new(admin).can_edit?(build(:topic, user: user, archived: true)).should be_false + end end end