FIX: Allow category group reviewers to edit queued posts

They can edit title, body and tags. Category is disabled for now as it
could lead to some odd security issues.
This commit is contained in:
Robin Ward 2019-05-01 14:48:49 -04:00
parent 0f01c9d25f
commit 885f1e7e5f
2 changed files with 14 additions and 4 deletions

View File

@ -36,11 +36,14 @@ class ReviewableQueuedPost < Reviewable
end end
def build_editable_fields(fields, guardian, args) def build_editable_fields(fields, guardian, args)
return unless guardian.is_staff?
# We can edit category / title if it's a new topic # We can edit category / title if it's a new topic
if topic_id.blank? if topic_id.blank?
fields.add('category_id', :category)
# Only staff can edit category for now, since in theory a category group reviewer could
# post in a category they don't have access to.
fields.add('category_id', :category) if guardian.is_staff?
fields.add('payload.title', :text) fields.add('payload.title', :text)
fields.add('payload.tags', :tags) fields.add('payload.tags', :tags)
end end

View File

@ -137,15 +137,22 @@ RSpec.describe ReviewableQueuedPost, type: :model do
let(:reviewable) { Fabricate(:reviewable_queued_post_topic, category: category) } let(:reviewable) { Fabricate(:reviewable_queued_post_topic, category: category) }
context "editing" do context "editing" do
let(:guardian) { Guardian.new(moderator) }
it "is editable and returns the fields" do it "is editable and returns the fields" do
fields = reviewable.editable_for(guardian) fields = reviewable.editable_for(Guardian.new(moderator))
expect(fields.has?('category_id')).to eq(true) expect(fields.has?('category_id')).to eq(true)
expect(fields.has?('payload.raw')).to eq(true) expect(fields.has?('payload.raw')).to eq(true)
expect(fields.has?('payload.title')).to eq(true) expect(fields.has?('payload.title')).to eq(true)
expect(fields.has?('payload.tags')).to eq(true) expect(fields.has?('payload.tags')).to eq(true)
end end
it "is editable by a category group reviewer" do
fields = reviewable.editable_for(Guardian.new(Fabricate(:user)))
expect(fields.has?('category_id')).to eq(false)
expect(fields.has?('payload.raw')).to eq(true)
expect(fields.has?('payload.title')).to eq(true)
expect(fields.has?('payload.tags')).to eq(true)
end
end end
it "returns the appropriate create options for a topic" do it "returns the appropriate create options for a topic" do