From 47cb46671a0f605b7b56a9be1115519b75bcbd14 Mon Sep 17 00:00:00 2001 From: misaka4e21 Date: Thu, 21 Jun 2018 07:41:06 +0800 Subject: [PATCH] FEATURE: Support disabling tag creation for non-staff users. --- app/models/trust_level_and_staff_setting.rb | 21 +++++++++++++++++++++ config/site_settings.yml | 8 ++++---- lib/guardian/tag_guardian.rb | 4 ++++ 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 app/models/trust_level_and_staff_setting.rb diff --git a/app/models/trust_level_and_staff_setting.rb b/app/models/trust_level_and_staff_setting.rb new file mode 100644 index 00000000000..49d46ce039c --- /dev/null +++ b/app/models/trust_level_and_staff_setting.rb @@ -0,0 +1,21 @@ +require_dependency 'enum_site_setting' + +class TrustLevelAndStaffSetting < TrustLevelSetting + def self.valid_value?(val) + special_group?(val) || + (val.to_i.to_s == val.to_s && + valid_values.any? { |v| v == val.to_i }) + end + + def self.valid_values + TrustLevel.valid_range.to_a + special_groups + end + + def self.special_group?(val) + special_groups.include?(val.to_s) + end + + def self.special_groups + ['staff', 'admin'] + end +end diff --git a/config/site_settings.yml b/config/site_settings.yml index 777586427ba..4207c3ae6f9 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -1647,11 +1647,11 @@ tags: default: 20 client: true min_trust_to_create_tag: - default: 3 - enum: 'TrustLevelSetting' + default: '3' + enum: 'TrustLevelAndStaffSetting' min_trust_level_to_tag_topics: - default: 0 - enum: 'TrustLevelSetting' + default: '0' + enum: 'TrustLevelAndStaffSetting' client: true max_tag_search_results: client: true diff --git a/lib/guardian/tag_guardian.rb b/lib/guardian/tag_guardian.rb index 84856d4d152..d444f2096a0 100644 --- a/lib/guardian/tag_guardian.rb +++ b/lib/guardian/tag_guardian.rb @@ -1,10 +1,14 @@ #mixin for all guardian methods dealing with tagging permisions module TagGuardian def can_create_tag? + return is_admin? if SiteSetting.min_trust_to_create_tag.to_s == 'admin' + return is_staff? if SiteSetting.min_trust_to_create_tag.to_s == 'staff' user && SiteSetting.tagging_enabled && user.has_trust_level?(SiteSetting.min_trust_to_create_tag.to_i) end def can_tag_topics? + return is_admin? if SiteSetting.min_trust_level_to_tag_topics.to_s == 'admin' + return is_staff? if SiteSetting.min_trust_level_to_tag_topics.to_s == 'staff' user && SiteSetting.tagging_enabled && user.has_trust_level?(SiteSetting.min_trust_level_to_tag_topics.to_i) end