From 1d5d53a1237d62442279323c93349ddf5fab7494 Mon Sep 17 00:00:00 2001 From: xiaomlove Date: Thu, 11 Aug 2022 22:55:17 +0800 Subject: [PATCH] limit change user name interval --- app/Console/Commands/Test.php | 4 +++- .../System/SettingResource/Pages/EditSetting.php | 4 ++++ app/Repositories/UserRepository.php | 8 ++++++++ resources/lang/en/user.php | 1 + resources/lang/zh_CN/label.php | 1 + resources/lang/zh_CN/user.php | 1 + resources/lang/zh_TW/user.php | 1 + 7 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app/Console/Commands/Test.php b/app/Console/Commands/Test.php index 9a8b9d8b..699a7dfe 100644 --- a/app/Console/Commands/Test.php +++ b/app/Console/Commands/Test.php @@ -86,7 +86,9 @@ class Test extends Command */ public function handle() { - + $time = Carbon::parse('2022-08-10'); + $r = $time->diffInDays(); + dd($r); } diff --git a/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php b/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php index 36c4a200..99a84b5c 100644 --- a/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php +++ b/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php @@ -126,6 +126,10 @@ class EditSetting extends Page implements Forms\Contracts\HasForms ->inline(true) ->label(__('label.setting.system.change_username_card_allow_characters_outside_the_alphabets')) , + Forms\Components\TextInput::make('system.change_username_min_interval_in_days') + ->integer() + ->label(__('label.setting.system.change_username_min_interval_in_days')) + , ])->columns(2); $tabs = apply_filter('nexus_setting_tabs', $tabs); diff --git a/app/Repositories/UserRepository.php b/app/Repositories/UserRepository.php index 2cb9ed4b..6c294879 100644 --- a/app/Repositories/UserRepository.php +++ b/app/Repositories/UserRepository.php @@ -399,6 +399,14 @@ class UserRepository extends BaseRepository $meta = $records->get($metaKey)->first(); $user = User::query()->findOrFail($uid, User::$commonFields); if ($metaKey == UserMeta::META_KEY_CHANGE_USERNAME) { + $changeLog = $user->usernameChangeLogs()->orderBy('id', 'desc')->first(); + if ($changeLog) { + $miniDays = Setting::get('system.change_username_min_interval_in_days', 365); + if ($changeLog->created_at->diffInDays() <= $miniDays) { + $msg = nexus_trans('user.change_username_lte_min_interval', ['last_change_time' => $changeLog->created_at, 'interval' => $miniDays]); + throw new \RuntimeException($msg); + } + } NexusDB::transaction(function () use ($user, $meta, $params) { $this->changeUsername( $user, UsernameChangeLog::CHANGE_TYPE_USER, $user, $params['username'], diff --git a/resources/lang/en/user.php b/resources/lang/en/user.php index fb558ba2..f2ef1427 100644 --- a/resources/lang/en/user.php +++ b/resources/lang/en/user.php @@ -26,4 +26,5 @@ return [ \App\Models\User::CLASS_SYSOP => 'Sysop', \App\Models\User::CLASS_STAFF_LEADER => 'Staff Leader', ], + 'change_username_lte_min_interval' => 'Last change time: :last_change_time, unmet minimum interval: :interval days', ]; diff --git a/resources/lang/zh_CN/label.php b/resources/lang/zh_CN/label.php index 29087a92..33dfadf5 100644 --- a/resources/lang/zh_CN/label.php +++ b/resources/lang/zh_CN/label.php @@ -75,6 +75,7 @@ return [ 'system' => [ 'tab_header' => '系统', 'change_username_card_allow_characters_outside_the_alphabets' => '改名卡是否允许英文字母外的字符', + 'change_username_min_interval_in_days' => '修改用户名最小间隔天数', ], ], 'user' => [ diff --git a/resources/lang/zh_CN/user.php b/resources/lang/zh_CN/user.php index c98f5927..68c51678 100644 --- a/resources/lang/zh_CN/user.php +++ b/resources/lang/zh_CN/user.php @@ -26,4 +26,5 @@ return [ \App\Models\User::CLASS_SYSOP => '维护开发员', \App\Models\User::CLASS_STAFF_LEADER => '主管', ], + 'change_username_lte_min_interval' => '上次修改时间::last_change_time,未满足最小间隔::interval 天', ]; diff --git a/resources/lang/zh_TW/user.php b/resources/lang/zh_TW/user.php index 73c15278..7e744363 100644 --- a/resources/lang/zh_TW/user.php +++ b/resources/lang/zh_TW/user.php @@ -26,4 +26,5 @@ return [ \App\Models\User::CLASS_SYSOP => '維護開發員', \App\Models\User::CLASS_STAFF_LEADER => '主管', ], + 'change_username_lte_min_interval' => '上次修改時間::last_change_time,未滿足最小間隔::interval 天', ];