mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 21:33:43 +08:00
DEV: Convert min_trust_to_edit_wiki_post to groups (#24766)
This change converts the min_trust_to_edit_wiki_post site setting to edit_wiki_post_allowed_groups. See: https://meta.discourse.org/t/283408 Hides the old setting Adds the new site setting Add a deprecation warning Updates to use the new setting Adds a migration to fill in the new setting if the old setting was changed Adds an entry to the site_setting.keywords section Updates tests to account for the new change After a couple of months, we will remove the email_in_min_trust setting entirely. Internal ref: /t/117248
This commit is contained in:
parent
5140caf0e4
commit
7dd150bc95
|
@ -1961,6 +1961,7 @@ en:
|
||||||
allow_flagging_staff: "If enabled, users can flag posts from staff accounts."
|
allow_flagging_staff: "If enabled, users can flag posts from staff accounts."
|
||||||
|
|
||||||
min_trust_to_edit_wiki_post: "The minimum trust level required to edit post marked as wiki."
|
min_trust_to_edit_wiki_post: "The minimum trust level required to edit post marked as wiki."
|
||||||
|
edit_wiki_post_allowed_groups: "Groups that are allowed to edit posts marked as wiki."
|
||||||
|
|
||||||
min_trust_to_edit_post: "The minimum trust level required to edit posts."
|
min_trust_to_edit_post: "The minimum trust level required to edit posts."
|
||||||
|
|
||||||
|
@ -2551,6 +2552,7 @@ en:
|
||||||
approve_unless_allowed_groups: "approve_unless_trust_level"
|
approve_unless_allowed_groups: "approve_unless_trust_level"
|
||||||
approve_new_topics_unless_allowed_groups: "approve_new_topics_unless_trust_level"
|
approve_new_topics_unless_allowed_groups: "approve_new_topics_unless_trust_level"
|
||||||
email_in_allowed_groups: "email_in_min_trust"
|
email_in_allowed_groups: "email_in_min_trust"
|
||||||
|
edit_wiki_post_allowed_groups: "minmin_trust_to_edit_wiki_post"
|
||||||
|
|
||||||
placeholder:
|
placeholder:
|
||||||
discourse_connect_provider_secrets:
|
discourse_connect_provider_secrets:
|
||||||
|
|
|
@ -1675,6 +1675,13 @@ trust:
|
||||||
min_trust_to_edit_wiki_post:
|
min_trust_to_edit_wiki_post:
|
||||||
default: 1
|
default: 1
|
||||||
enum: "TrustLevelSetting"
|
enum: "TrustLevelSetting"
|
||||||
|
hidden: true
|
||||||
|
edit_wiki_post_allowed_groups:
|
||||||
|
default: 11
|
||||||
|
type: group_list
|
||||||
|
allow_any: false
|
||||||
|
refresh: true
|
||||||
|
validator: "AtLeastOneGroupValidator"
|
||||||
min_trust_to_edit_post:
|
min_trust_to_edit_post:
|
||||||
default: 0
|
default: 0
|
||||||
enum: "TrustLevelSetting"
|
enum: "TrustLevelSetting"
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class FillEditWikiPostAllowedGroupsBasedOnDeprecatedSettings < ActiveRecord::Migration[7.0]
|
||||||
|
def up
|
||||||
|
old_setting_trust_level =
|
||||||
|
DB.query_single(
|
||||||
|
"SELECT value FROM site_settings WHERE name = 'min_trust_to_edit_wiki_post' LIMIT 1",
|
||||||
|
).first
|
||||||
|
|
||||||
|
if old_setting_trust_level.present?
|
||||||
|
edit_wiki_post_allowed_groups = "1#{old_setting_trust_level}"
|
||||||
|
|
||||||
|
DB.exec(
|
||||||
|
"INSERT INTO site_settings(name, value, data_type, created_at, updated_at)
|
||||||
|
VALUES('edit_wiki_post_allowed_groups', :setting, '20', NOW(), NOW())",
|
||||||
|
setting: edit_wiki_post_allowed_groups,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
raise ActiveRecord::IrreversibleMigration
|
||||||
|
end
|
||||||
|
end
|
|
@ -159,7 +159,7 @@ module PostGuardian
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
if post.wiki && (@user.trust_level >= SiteSetting.min_trust_to_edit_wiki_post.to_i)
|
if post.wiki && @user.in_any_groups?(SiteSetting.edit_wiki_post_allowed_groups_map)
|
||||||
return can_create_post?(post.topic)
|
return can_create_post?(post.topic)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -330,7 +330,7 @@ module TopicGuardian
|
||||||
return true if can_edit_topic?(topic)
|
return true if can_edit_topic?(topic)
|
||||||
|
|
||||||
if topic&.first_post&.wiki &&
|
if topic&.first_post&.wiki &&
|
||||||
(@user.trust_level >= SiteSetting.min_trust_to_edit_wiki_post.to_i)
|
@user.in_any_groups?(SiteSetting.edit_wiki_post_allowed_groups_map)
|
||||||
return can_create_post?(topic)
|
return can_create_post?(topic)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ module SiteSettings::DeprecatedSettings
|
||||||
"3.3",
|
"3.3",
|
||||||
],
|
],
|
||||||
["email_in_min_trust", "email_in_allowed_groups", false, "3.3"],
|
["email_in_min_trust", "email_in_allowed_groups", false, "3.3"],
|
||||||
|
["min_trust_to_edit_wiki_post", "edit_wiki_post_allowed_groups", false, "3.3"],
|
||||||
]
|
]
|
||||||
|
|
||||||
def setup_deprecated_methods
|
def setup_deprecated_methods
|
||||||
|
|
|
@ -52,9 +52,7 @@ after_initialize do
|
||||||
config.allowed_user_ids += topic.allowed_users.pluck(:id)
|
config.allowed_user_ids += topic.allowed_users.pluck(:id)
|
||||||
config.allowed_group_ids += topic.allowed_groups.pluck(:id)
|
config.allowed_group_ids += topic.allowed_groups.pluck(:id)
|
||||||
elsif post.wiki
|
elsif post.wiki
|
||||||
config.allowed_group_ids << Group::AUTO_GROUPS[
|
config.allowed_group_ids += SiteSetting.edit_wiki_post_allowed_groups_map
|
||||||
:"trust_level_#{SiteSetting.min_trust_to_edit_wiki_post}"
|
|
||||||
]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if !topic.private_message? && SiteSetting.edit_all_post_groups.present?
|
if !topic.private_message? && SiteSetting.edit_all_post_groups.present?
|
||||||
|
|
|
@ -149,13 +149,13 @@ RSpec.describe "discourse-presence" do
|
||||||
expect(c.config.allowed_user_ids).to contain_exactly(user.id)
|
expect(c.config.allowed_user_ids).to contain_exactly(user.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "follows the wiki edit trust level site setting" do
|
it "follows the wiki edit allowed groups site setting" do
|
||||||
p = Fabricate(:post, topic: public_topic, user: user, wiki: true)
|
p = Fabricate(:post, topic: public_topic, user: user, wiki: true)
|
||||||
SiteSetting.min_trust_to_edit_wiki_post = TrustLevel.levels[:basic]
|
SiteSetting.edit_wiki_post_allowed_groups = Group::AUTO_GROUPS[:trust_level_3]
|
||||||
|
|
||||||
c = PresenceChannel.new("/discourse-presence/edit/#{p.id}")
|
c = PresenceChannel.new("/discourse-presence/edit/#{p.id}")
|
||||||
expect(c.config.public).to eq(false)
|
expect(c.config.public).to eq(false)
|
||||||
expect(c.config.allowed_group_ids).to include(Group::AUTO_GROUPS[:trust_level_1])
|
expect(c.config.allowed_group_ids).to include(Group::AUTO_GROUPS[:trust_level_3])
|
||||||
expect(c.config.allowed_user_ids).to contain_exactly(user.id)
|
expect(c.config.allowed_user_ids).to contain_exactly(user.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1682,26 +1682,26 @@ RSpec.describe Guardian do
|
||||||
expect(Guardian.new(post.user).can_edit?(post)).to be_truthy
|
expect(Guardian.new(post.user).can_edit?(post)).to be_truthy
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns false when another user has too low trust level to edit wiki post" do
|
it "returns false when another user is not member of edit wiki post group" do
|
||||||
SiteSetting.min_trust_to_edit_wiki_post = 2
|
SiteSetting.edit_wiki_post_allowed_groups = Group::AUTO_GROUPS[:trust_level_2]
|
||||||
post.wiki = true
|
post.wiki = true
|
||||||
coding_horror.trust_level = 1
|
Group.user_trust_level_change!(coding_horror.id, 1)
|
||||||
|
|
||||||
expect(Guardian.new(coding_horror).can_edit?(post)).to be_falsey
|
expect(Guardian.new(coding_horror).can_edit?(post)).to be_falsey
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true when another user has adequate trust level to edit wiki post" do
|
it "returns true when another user is member of edit wiki post group" do
|
||||||
SiteSetting.min_trust_to_edit_wiki_post = 2
|
SiteSetting.edit_wiki_post_allowed_groups = Group::AUTO_GROUPS[:trust_level_2]
|
||||||
post.wiki = true
|
post.wiki = true
|
||||||
coding_horror.trust_level = 2
|
Group.user_trust_level_change!(coding_horror.id, 2)
|
||||||
|
|
||||||
expect(Guardian.new(coding_horror).can_edit?(post)).to be_truthy
|
expect(Guardian.new(coding_horror).can_edit?(post)).to be_truthy
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true for post author even when he has too low trust level to edit wiki post" do
|
it "returns true for post author even when author is not member of edit wiki post group" do
|
||||||
SiteSetting.min_trust_to_edit_wiki_post = 2
|
SiteSetting.edit_wiki_post_allowed_groups = Group::AUTO_GROUPS[:trust_level_2]
|
||||||
post.wiki = true
|
post.wiki = true
|
||||||
post.user.trust_level = 1
|
Group.user_trust_level_change!(post.user, 1)
|
||||||
|
|
||||||
expect(Guardian.new(post.user).can_edit?(post)).to be_truthy
|
expect(Guardian.new(post.user).can_edit?(post)).to be_truthy
|
||||||
end
|
end
|
||||||
|
|
|
@ -1877,7 +1877,7 @@ RSpec.describe TopicsController do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "can add a tag to wiki topic" do
|
it "can add a tag to wiki topic" do
|
||||||
SiteSetting.min_trust_to_edit_wiki_post = 2
|
SiteSetting.edit_wiki_post_allowed_groups = Group::AUTO_GROUPS[:trust_level_2]
|
||||||
topic.first_post.update!(wiki: true)
|
topic.first_post.update!(wiki: true)
|
||||||
sign_in(user_2)
|
sign_in(user_2)
|
||||||
|
|
||||||
|
@ -1887,6 +1887,7 @@ RSpec.describe TopicsController do
|
||||||
|
|
||||||
expect(response.status).to eq(403)
|
expect(response.status).to eq(403)
|
||||||
user_2.update!(trust_level: 2)
|
user_2.update!(trust_level: 2)
|
||||||
|
Group.refresh_automatic_groups!
|
||||||
|
|
||||||
expect do put "/t/#{topic.id}/tags.json", params: { tags: [tag.name] } end.to change {
|
expect do put "/t/#{topic.id}/tags.json", params: { tags: [tag.name] } end.to change {
|
||||||
topic.reload.first_post.revisions.count
|
topic.reload.first_post.revisions.count
|
||||||
|
|
|
@ -445,7 +445,7 @@ RSpec.describe TopicViewSerializer do
|
||||||
context "with can_edit_tags" do
|
context "with can_edit_tags" do
|
||||||
before do
|
before do
|
||||||
SiteSetting.tagging_enabled = true
|
SiteSetting.tagging_enabled = true
|
||||||
SiteSetting.min_trust_to_edit_wiki_post = 2
|
SiteSetting.edit_wiki_post_allowed_groups = Group::AUTO_GROUPS[:trust_level_2]
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns true when user can edit a wiki topic" do
|
it "returns true when user can edit a wiki topic" do
|
||||||
|
@ -456,8 +456,9 @@ RSpec.describe TopicViewSerializer do
|
||||||
expect(json[:details][:can_edit_tags]).to be_nil
|
expect(json[:details][:can_edit_tags]).to be_nil
|
||||||
|
|
||||||
user.update!(trust_level: 2)
|
user.update!(trust_level: 2)
|
||||||
|
Group.refresh_automatic_groups!
|
||||||
|
|
||||||
json = serialize_topic(topic, user)
|
json = serialize_topic(topic, user.reload)
|
||||||
expect(json[:details][:can_edit_tags]).to eq(true)
|
expect(json[:details][:can_edit_tags]).to eq(true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user