diff --git a/app/assets/javascripts/discourse/templates/topic.hbs b/app/assets/javascripts/discourse/templates/topic.hbs
index ace64e6e75a..d8fc7fd7080 100644
--- a/app/assets/javascripts/discourse/templates/topic.hbs
+++ b/app/assets/javascripts/discourse/templates/topic.hbs
@@ -256,7 +256,7 @@
{{/if}}
- {{#if currentUser.admin}}
+ {{#if currentUser.staff}}
{{#if model.isPrivateMessage}}
{{d-button action="convertToPublicTopic" icon="comment" label="topic.actions.make_public"}}
diff --git a/lib/guardian/topic_guardian.rb b/lib/guardian/topic_guardian.rb
index 04c81a894af..d766af64e85 100644
--- a/lib/guardian/topic_guardian.rb
+++ b/lib/guardian/topic_guardian.rb
@@ -59,7 +59,9 @@ module TopicGuardian
end
def can_convert_topic?(topic)
- topic && !topic.trashed? && is_admin?
+ return false if topic && topic.trashed?
+ return true if is_admin?
+ is_moderator? && can_create_post?(topic)
end
def can_reply_as_new_topic?(topic)
diff --git a/spec/components/guardian_spec.rb b/spec/components/guardian_spec.rb
index 969067404ef..13fbd297add 100644
--- a/spec/components/guardian_spec.rb
+++ b/spec/components/guardian_spec.rb
@@ -881,8 +881,12 @@ describe Guardian do
expect(Guardian.new.can_convert_topic?(topic)).to be_falsey
end
- it 'returns false when not admin' do
- expect(Guardian.new(moderator).can_convert_topic?(topic)).to be_falsey
+ it 'returns false when not staff' do
+ expect(Guardian.new(trust_level_4).can_convert_topic?(topic)).to be_falsey
+ end
+
+ it 'returns true when a moderator' do
+ expect(Guardian.new(moderator).can_convert_topic?(topic)).to be_truthy
end
it 'returns true when an admin' do