From 2f32af394153928f20e701dcad5c3792875b30a0 Mon Sep 17 00:00:00 2001 From: Neil Lalonde Date: Fri, 15 Aug 2014 12:44:58 -0400 Subject: [PATCH] FIX: staff should be able to edit topics that have been archived --- lib/guardian/topic_guardian.rb | 6 +++--- spec/components/guardian_spec.rb | 18 +++++++++++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/lib/guardian/topic_guardian.rb b/lib/guardian/topic_guardian.rb index 7c134998aa3..c27479920cd 100644 --- a/lib/guardian/topic_guardian.rb +++ b/lib/guardian/topic_guardian.rb @@ -27,10 +27,10 @@ module TopicGuardian # Editing Method def can_edit_topic?(topic) - return false if topic.archived - return true if is_my_own?(topic) return false if Discourse.static_doc_topic_ids.include?(topic.id) && !is_admin? - is_staff? || user.has_trust_level?(:leader) + return true if is_staff? || user.has_trust_level?(:leader) + return false if topic.archived + is_my_own?(topic) end # Recovery Method diff --git a/spec/components/guardian_spec.rb b/spec/components/guardian_spec.rb index 4ff487e7e61..ef9202c7987 100644 --- a/spec/components/guardian_spec.rb +++ b/spec/components/guardian_spec.rb @@ -550,7 +550,7 @@ describe Guardian do Guardian.new(coding_horror).can_create?(Post, topic).should be_false end - it 'allows editing of posts' do + it 'does not allow editing of posts' do Guardian.new(coding_horror).can_edit?(post).should be_false end end @@ -854,16 +854,20 @@ describe Guardian do end context 'archived' do - it 'returns false as a moderator' do - Guardian.new(moderator).can_edit?(build(:topic, user: user, archived: true)).should == false + it 'returns true as a moderator' do + Guardian.new(moderator).can_edit?(build(:topic, user: user, archived: true)).should == true end - it 'returns false as an admin' do - Guardian.new(admin).can_edit?(build(:topic, user: user, archived: true)).should == false + it 'returns true as an admin' do + Guardian.new(admin).can_edit?(build(:topic, user: user, archived: true)).should == true end - it 'returns false at trust level 3' do - Guardian.new(leader).can_edit?(build(:topic, user: user, archived: true)).should == false + it 'returns true at trust level 3' do + Guardian.new(leader).can_edit?(build(:topic, user: user, archived: true)).should == true + end + + it 'returns false as a topic creator' do + Guardian.new(user).can_edit?(build(:topic, user: user, archived: true)).should == false end end end