DEV: Convert min_trust_to_send_email_messages to groups (#24942)
We're changing the implementation of trust levels to use groups. Part of this is to have site settings that reference trust levels use groups instead. It converts the min_trust_to_send_email_messages site setting to send_email_messages_allowed_groups.
This commit is contained in:
parent
0d38b4d0a9
commit
e4494b26fd
|
@ -1979,6 +1979,7 @@ en:
|
||||||
|
|
||||||
min_trust_to_send_messages: "DEPRECATED, use the 'personal message enabled groups' setting instead. The minimum trust level required to create new personal messages."
|
min_trust_to_send_messages: "DEPRECATED, use the 'personal message enabled groups' setting instead. The minimum trust level required to create new personal messages."
|
||||||
min_trust_to_send_email_messages: "The minimum trust level required to send personal messages via email."
|
min_trust_to_send_email_messages: "The minimum trust level required to send personal messages via email."
|
||||||
|
send_email_messages_allowed_groups: "Groups that are allowed to send personal messages via email."
|
||||||
min_trust_to_flag_posts: "The minimum trust level required to flag posts"
|
min_trust_to_flag_posts: "The minimum trust level required to flag posts"
|
||||||
flag_post_allowed_groups: "Groups that are allowed to flag posts."
|
flag_post_allowed_groups: "Groups that are allowed to flag posts."
|
||||||
min_trust_to_post_links: "The minimum trust level required to include links in posts"
|
min_trust_to_post_links: "The minimum trust level required to include links in posts"
|
||||||
|
@ -2580,6 +2581,7 @@ en:
|
||||||
ignore_allowed_groups: "min_trust_level_to_allow_ignore"
|
ignore_allowed_groups: "min_trust_level_to_allow_ignore"
|
||||||
self_wiki_allowed_groups: "min_trust_to_allow_self_wiki"
|
self_wiki_allowed_groups: "min_trust_to_allow_self_wiki"
|
||||||
create_tag_allowed_groups: "min_trust_to_create_tag"
|
create_tag_allowed_groups: "min_trust_to_create_tag"
|
||||||
|
send_email_messages_allowed_groups: "min_trust_to_send_email_messages"
|
||||||
|
|
||||||
placeholder:
|
placeholder:
|
||||||
discourse_connect_provider_secrets:
|
discourse_connect_provider_secrets:
|
||||||
|
|
|
@ -1727,6 +1727,13 @@ trust:
|
||||||
min_trust_to_send_email_messages:
|
min_trust_to_send_email_messages:
|
||||||
default: "4"
|
default: "4"
|
||||||
enum: "TrustLevelAndStaffSetting"
|
enum: "TrustLevelAndStaffSetting"
|
||||||
|
hidden: true
|
||||||
|
send_email_messages_allowed_groups:
|
||||||
|
default: "1|3|14"
|
||||||
|
type: group_list
|
||||||
|
allow_any: false
|
||||||
|
refresh: true
|
||||||
|
validator: "AtLeastOneGroupValidator"
|
||||||
min_trust_to_flag_posts:
|
min_trust_to_flag_posts:
|
||||||
default: 1
|
default: 1
|
||||||
enum: "TrustLevelSetting"
|
enum: "TrustLevelSetting"
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class FillSendEmailMessagesAllowedGroupsBasedOnDeprecatedSettings < ActiveRecord::Migration[7.0]
|
||||||
|
def up
|
||||||
|
configured_trust_level =
|
||||||
|
DB.query_single(
|
||||||
|
"SELECT value FROM site_settings WHERE name = 'min_trust_to_send_email_messages' LIMIT 1",
|
||||||
|
).first
|
||||||
|
|
||||||
|
# Default for old setting is TL4, we only need to do anything if it's been changed in the DB.
|
||||||
|
if configured_trust_level.present?
|
||||||
|
corresponding_group =
|
||||||
|
case configured_trust_level
|
||||||
|
when "admin"
|
||||||
|
"1"
|
||||||
|
when "staff"
|
||||||
|
"1|3"
|
||||||
|
# Matches Group::AUTO_GROUPS to the trust levels.
|
||||||
|
else
|
||||||
|
"1|3|1#{configured_trust_level}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Data_type 20 is group_list.
|
||||||
|
DB.exec(
|
||||||
|
"INSERT INTO site_settings(name, value, data_type, created_at, updated_at)
|
||||||
|
VALUES('send_email_messages_allowed_groups', :setting, '20', NOW(), NOW())",
|
||||||
|
setting: corresponding_group,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
raise ActiveRecord::IrreversibleMigration
|
||||||
|
end
|
||||||
|
end
|
|
@ -526,7 +526,7 @@ class Guardian
|
||||||
return false if !authenticated?
|
return false if !authenticated?
|
||||||
# User is trusted enough
|
# User is trusted enough
|
||||||
@user.in_any_groups?(SiteSetting.personal_message_enabled_groups_map) &&
|
@user.in_any_groups?(SiteSetting.personal_message_enabled_groups_map) &&
|
||||||
@user.has_trust_level_or_staff?(SiteSetting.min_trust_to_send_email_messages)
|
@user.in_any_groups?(SiteSetting.send_email_messages_allowed_groups_map)
|
||||||
end
|
end
|
||||||
|
|
||||||
def can_export_entity?(entity)
|
def can_export_entity?(entity)
|
||||||
|
|
|
@ -35,6 +35,7 @@ module SiteSettings::DeprecatedSettings
|
||||||
["min_trust_level_to_allow_ignore", "ignore_allowed_groups", false, "3.3"],
|
["min_trust_level_to_allow_ignore", "ignore_allowed_groups", false, "3.3"],
|
||||||
["min_trust_to_allow_self_wiki", "self_wiki_allowed_groups", false, "3.3"],
|
["min_trust_to_allow_self_wiki", "self_wiki_allowed_groups", false, "3.3"],
|
||||||
["min_trust_to_create_tag", "create_tag_allowed_groups", false, "3.3"],
|
["min_trust_to_create_tag", "create_tag_allowed_groups", false, "3.3"],
|
||||||
|
["min_trust_to_send_email_messages", "send_email_messages_allowed_groups", false, "3.3"],
|
||||||
]
|
]
|
||||||
|
|
||||||
OVERRIDE_TL_GROUP_SETTINGS = %w[
|
OVERRIDE_TL_GROUP_SETTINGS = %w[
|
||||||
|
@ -54,6 +55,7 @@ module SiteSettings::DeprecatedSettings
|
||||||
min_trust_level_to_allow_invite
|
min_trust_level_to_allow_invite
|
||||||
min_trust_level_to_allow_ignore
|
min_trust_level_to_allow_ignore
|
||||||
min_trust_to_create_tag
|
min_trust_to_create_tag
|
||||||
|
min_trust_to_send_email_messages
|
||||||
]
|
]
|
||||||
|
|
||||||
def group_to_tl(old_setting, new_setting)
|
def group_to_tl(old_setting, new_setting)
|
||||||
|
@ -111,13 +113,7 @@ module SiteSettings::DeprecatedSettings
|
||||||
|
|
||||||
def setup_deprecated_methods
|
def setup_deprecated_methods
|
||||||
SETTINGS.each do |old_setting, new_setting, override, version|
|
SETTINGS.each do |old_setting, new_setting, override, version|
|
||||||
if !override
|
SiteSetting.singleton_class.alias_method(:"_#{old_setting}", :"#{old_setting}") if !override
|
||||||
SiteSetting.singleton_class.public_send(
|
|
||||||
:alias_method,
|
|
||||||
:"_#{old_setting}",
|
|
||||||
:"#{old_setting}",
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
if OVERRIDE_TL_GROUP_SETTINGS.include?(old_setting)
|
if OVERRIDE_TL_GROUP_SETTINGS.include?(old_setting)
|
||||||
define_singleton_method "_group_to_tl_#{old_setting}" do |warn: true|
|
define_singleton_method "_group_to_tl_#{old_setting}" do |warn: true|
|
||||||
|
@ -140,13 +136,7 @@ module SiteSettings::DeprecatedSettings
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if !override
|
SiteSetting.singleton_class.alias_method(:"_#{old_setting}?", :"#{old_setting}?") if !override
|
||||||
SiteSetting.singleton_class.public_send(
|
|
||||||
:alias_method,
|
|
||||||
:"_#{old_setting}?",
|
|
||||||
:"#{old_setting}?",
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
define_singleton_method "#{old_setting}?" do |warn: true|
|
define_singleton_method "#{old_setting}?" do |warn: true|
|
||||||
if warn
|
if warn
|
||||||
|
@ -159,13 +149,7 @@ module SiteSettings::DeprecatedSettings
|
||||||
self.public_send("#{override ? new_setting : "_" + old_setting}?")
|
self.public_send("#{override ? new_setting : "_" + old_setting}?")
|
||||||
end
|
end
|
||||||
|
|
||||||
if !override
|
SiteSetting.singleton_class.alias_method(:"_#{old_setting}=", :"#{old_setting}=") if !override
|
||||||
SiteSetting.singleton_class.public_send(
|
|
||||||
:alias_method,
|
|
||||||
:"_#{old_setting}=",
|
|
||||||
:"#{old_setting}=",
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
define_singleton_method "#{old_setting}=" do |val, warn: true|
|
define_singleton_method "#{old_setting}=" do |val, warn: true|
|
||||||
if warn
|
if warn
|
||||||
|
|
|
@ -526,7 +526,8 @@ RSpec.describe TopicCreator do
|
||||||
SiteSetting.manual_polling_enabled = true
|
SiteSetting.manual_polling_enabled = true
|
||||||
SiteSetting.reply_by_email_address = "sam+%{reply_key}@sam.com"
|
SiteSetting.reply_by_email_address = "sam+%{reply_key}@sam.com"
|
||||||
SiteSetting.reply_by_email_enabled = true
|
SiteSetting.reply_by_email_enabled = true
|
||||||
SiteSetting.min_trust_to_send_email_messages = TrustLevel[1]
|
SiteSetting.send_email_messages_allowed_groups =
|
||||||
|
"1|3|#{Group::AUTO_GROUPS[:trust_level_1]}"
|
||||||
attrs = pm_to_email_valid_attrs.dup
|
attrs = pm_to_email_valid_attrs.dup
|
||||||
attrs[:target_emails] = "t" * 256
|
attrs[:target_emails] = "t" * 256
|
||||||
|
|
||||||
|
@ -548,28 +549,30 @@ RSpec.describe TopicCreator do
|
||||||
before { Group.refresh_automatic_groups! }
|
before { Group.refresh_automatic_groups! }
|
||||||
|
|
||||||
it "works for staff" do
|
it "works for staff" do
|
||||||
SiteSetting.min_trust_to_send_email_messages = "staff"
|
SiteSetting.send_email_messages_allowed_groups = "1|3"
|
||||||
expect(
|
expect(
|
||||||
TopicCreator.create(admin, Guardian.new(admin), pm_to_email_valid_attrs),
|
TopicCreator.create(admin, Guardian.new(admin), pm_to_email_valid_attrs),
|
||||||
).to be_valid
|
).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "work for trusted users" do
|
it "work for trusted users" do
|
||||||
SiteSetting.min_trust_to_send_email_messages = 3
|
SiteSetting.send_email_messages_allowed_groups =
|
||||||
user.update!(trust_level: 3)
|
"1|3|#{Group::AUTO_GROUPS[:trust_level_3]}"
|
||||||
|
user.change_trust_level!(TrustLevel[3])
|
||||||
expect(TopicCreator.create(user, Guardian.new(user), pm_to_email_valid_attrs)).to be_valid
|
expect(TopicCreator.create(user, Guardian.new(user), pm_to_email_valid_attrs)).to be_valid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does not work for non-staff" do
|
it "does not work for non-staff" do
|
||||||
SiteSetting.min_trust_to_send_email_messages = "staff"
|
SiteSetting.send_email_messages_allowed_groups = "1|3"
|
||||||
expect {
|
expect {
|
||||||
TopicCreator.create(user, Guardian.new(user), pm_to_email_valid_attrs)
|
TopicCreator.create(user, Guardian.new(user), pm_to_email_valid_attrs)
|
||||||
}.to raise_error(ActiveRecord::Rollback)
|
}.to raise_error(ActiveRecord::Rollback)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does not work for untrusted users" do
|
it "does not work for untrusted users" do
|
||||||
SiteSetting.min_trust_to_send_email_messages = 3
|
SiteSetting.send_email_messages_allowed_groups =
|
||||||
user.update!(trust_level: 2)
|
"1|3|#{Group::AUTO_GROUPS[:trust_level_3]}"
|
||||||
|
user.change_trust_level!(TrustLevel[2])
|
||||||
expect {
|
expect {
|
||||||
TopicCreator.create(user, Guardian.new(user), pm_to_email_valid_attrs)
|
TopicCreator.create(user, Guardian.new(user), pm_to_email_valid_attrs)
|
||||||
}.to raise_error(ActiveRecord::Rollback)
|
}.to raise_error(ActiveRecord::Rollback)
|
||||||
|
|
Loading…
Reference in New Issue