diff --git a/app/assets/javascripts/discourse/app/widgets/hamburger-menu.js b/app/assets/javascripts/discourse/app/widgets/hamburger-menu.js index b7a044358c7..ed042a99f33 100644 --- a/app/assets/javascripts/discourse/app/widgets/hamburger-menu.js +++ b/app/assets/javascripts/discourse/app/widgets/hamburger-menu.js @@ -129,9 +129,7 @@ export default createWidget("hamburger-menu", { count: this.lookupCount("unread"), }); - // Staff always see the review link. - // Non-staff will see it if there are items to review - if (currentUser.staff || currentUser.reviewable_count) { + if (currentUser.can_review) { links.push({ route: siteSettings.reviewable_default_topics ? "review.topics" @@ -341,7 +339,7 @@ export default createWidget("hamburger-menu", { refreshReviewableCount(state) { const { currentUser } = this; - if (state.loading || !currentUser) { + if (state.loading || !currentUser || !currentUser.can_review) { return; } diff --git a/app/assets/javascripts/discourse/tests/fixtures/session-fixtures.js b/app/assets/javascripts/discourse/tests/fixtures/session-fixtures.js index 16519bb0a74..bdcbe345ce9 100644 --- a/app/assets/javascripts/discourse/tests/fixtures/session-fixtures.js +++ b/app/assets/javascripts/discourse/tests/fixtures/session-fixtures.js @@ -31,7 +31,8 @@ export default { akismet_review_count: 0, title_count_mode: "notifications", timezone: "Australia/Brisbane", - skip_new_user_tips: false + skip_new_user_tips: false, + can_review: true } } }; diff --git a/app/assets/javascripts/discourse/tests/integration/widgets/hamburger-menu-test.js b/app/assets/javascripts/discourse/tests/integration/widgets/hamburger-menu-test.js index 43f4581f1f9..52fd461819f 100644 --- a/app/assets/javascripts/discourse/tests/integration/widgets/hamburger-menu-test.js +++ b/app/assets/javascripts/discourse/tests/integration/widgets/hamburger-menu-test.js @@ -63,6 +63,7 @@ discourseModule( beforeEach() { this.currentUser.set("moderator", true); + this.currentUser.set("can_review", true); }, test(assert) { diff --git a/app/serializers/current_user_serializer.rb b/app/serializers/current_user_serializer.rb index 5b5fa0fed9b..3435efa2fb8 100644 --- a/app/serializers/current_user_serializer.rb +++ b/app/serializers/current_user_serializer.rb @@ -52,6 +52,7 @@ class CurrentUserSerializer < BasicUserSerializer :skip_new_user_tips, :do_not_disturb_until, :has_topic_draft, + :can_review def groups object.visible_groups.pluck(:id, :name).map { |id, name| { id: id, name: name } } @@ -212,6 +213,10 @@ class CurrentUserSerializer < BasicUserSerializer Reviewable.list_for(object).count end + def can_review + scope.can_see_review_queue? + end + def mailing_list_mode object.user_option.mailing_list_mode end diff --git a/spec/serializers/current_user_serializer_spec.rb b/spec/serializers/current_user_serializer_spec.rb index f318cccdfbc..52049da3f95 100644 --- a/spec/serializers/current_user_serializer_spec.rb +++ b/spec/serializers/current_user_serializer_spec.rb @@ -166,4 +166,24 @@ RSpec.describe CurrentUserSerializer do end end + + context '#can_review' do + it 'return false for regular users' do + serializer = serializer(Fabricate(:user)) + payload = serializer.as_json + + expect(payload[:can_review]).to eq(false) + end + + it 'returns trus for staff' do + serializer = serializer(Fabricate(:admin)) + payload = serializer.as_json + + expect(payload[:can_review]).to eq(true) + end + + def serializer(user) + CurrentUserSerializer.new(user, scope: Guardian.new(user), root: false) + end + end end