mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: Only show the review page to users that can see it. Do not publish the reviewable count update message to everyone. (#9556)
This commit is contained in:
parent
d8c884a856
commit
394babcae3
@ -6,6 +6,7 @@ class ReviewablesController < ApplicationController
|
|||||||
PER_PAGE = 10
|
PER_PAGE = 10
|
||||||
|
|
||||||
before_action :version_required, only: [:update, :perform]
|
before_action :version_required, only: [:update, :perform]
|
||||||
|
before_action :ensure_can_see
|
||||||
|
|
||||||
def index
|
def index
|
||||||
offset = params[:offset].to_i
|
offset = params[:offset].to_i
|
||||||
@ -260,4 +261,7 @@ protected
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def ensure_can_see
|
||||||
|
Guardian.new(current_user).ensure_can_see_review_queue!
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -48,6 +48,8 @@ protected
|
|||||||
end
|
end
|
||||||
|
|
||||||
def notify(count, user_ids)
|
def notify(count, user_ids)
|
||||||
|
return if user_ids.blank?
|
||||||
|
|
||||||
data = { reviewable_count: count }
|
data = { reviewable_count: count }
|
||||||
MessageBus.publish("/reviewable_counts", data, user_ids: user_ids)
|
MessageBus.publish("/reviewable_counts", data, user_ids: user_ids)
|
||||||
@contacted += user_ids
|
@contacted += user_ids
|
||||||
|
@ -144,4 +144,14 @@ module UserGuardian
|
|||||||
return false if topic.read_restricted_category? || topic.private_message?
|
return false if topic.read_restricted_category? || topic.private_message?
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def can_see_review_queue?
|
||||||
|
is_staff? || (
|
||||||
|
SiteSetting.enable_category_group_review &&
|
||||||
|
Reviewable
|
||||||
|
.where(reviewable_by_group_id: @user.group_users.pluck(:group_id))
|
||||||
|
.where('category_id IS NULL or category_id IN (?)', allowed_category_ids)
|
||||||
|
.exists?
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -341,4 +341,50 @@ describe UserGuardian do
|
|||||||
include_examples "can_delete_user staff examples"
|
include_examples "can_delete_user staff examples"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#can_see_review_queue?" do
|
||||||
|
it 'returns true when the user is a staff member' do
|
||||||
|
guardian = Guardian.new(moderator)
|
||||||
|
expect(guardian.can_see_review_queue?).to eq(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns false for a regular user' do
|
||||||
|
guardian = Guardian.new(user)
|
||||||
|
expect(guardian.can_see_review_queue?).to eq(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns true when the user's group can review an item in the queue" do
|
||||||
|
group = Fabricate(:group)
|
||||||
|
group.add(user)
|
||||||
|
guardian = Guardian.new(user)
|
||||||
|
SiteSetting.enable_category_group_review = true
|
||||||
|
|
||||||
|
Fabricate(:reviewable_flagged_post, reviewable_by_group: group, category: nil)
|
||||||
|
|
||||||
|
expect(guardian.can_see_review_queue?).to eq(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns false if category group review is disabled' do
|
||||||
|
group = Fabricate(:group)
|
||||||
|
group.add(user)
|
||||||
|
guardian = Guardian.new(user)
|
||||||
|
SiteSetting.enable_category_group_review = false
|
||||||
|
|
||||||
|
Fabricate(:reviewable_flagged_post, reviewable_by_group: group, category: nil)
|
||||||
|
|
||||||
|
expect(guardian.can_see_review_queue?).to eq(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'returns false if the reviewable is under a read restricted category' do
|
||||||
|
group = Fabricate(:group)
|
||||||
|
group.add(user)
|
||||||
|
guardian = Guardian.new(user)
|
||||||
|
SiteSetting.enable_category_group_review = true
|
||||||
|
category = Fabricate(:category, read_restricted: true)
|
||||||
|
|
||||||
|
Fabricate(:reviewable_flagged_post, reviewable_by_group: group, category: category)
|
||||||
|
|
||||||
|
expect(guardian.can_see_review_queue?).to eq(false)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -102,4 +102,15 @@ describe Jobs::NotifyReviewable do
|
|||||||
expect(group_msg.data[:reviewable_count]).to eq(0)
|
expect(group_msg.data[:reviewable_count]).to eq(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'skips sending notifications if user_ids is empty' do
|
||||||
|
reviewable = Fabricate(:reviewable, reviewable_by_moderator: true)
|
||||||
|
regular_user = Fabricate(:user)
|
||||||
|
|
||||||
|
messages = MessageBus.track_publish("/reviewable_counts") do
|
||||||
|
described_class.new.execute(reviewable_id: reviewable.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
expect(messages.size).to eq(1)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@ -590,7 +590,7 @@ describe ReviewablesController do
|
|||||||
end
|
end
|
||||||
|
|
||||||
context "#destroy" do
|
context "#destroy" do
|
||||||
fab!(:user) { Fabricate(:user) }
|
fab!(:user) { Fabricate(:admin) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
sign_in(user)
|
sign_in(user)
|
||||||
|
Loading…
Reference in New Issue
Block a user