diff --git a/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php b/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php index af1d9c53e..a0039d432 100644 --- a/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php +++ b/app/Filament/Resources/System/SettingResource/Pages/EditSetting.php @@ -8,6 +8,7 @@ use App\Models\SearchBox; use App\Models\Setting; use App\Models\Tag; +use App\Models\User; use App\Repositories\MeiliSearchRepository; use Filament\Facades\Filament; use Filament\Forms\ComponentContainer; @@ -155,6 +156,11 @@ private function getTabs(): array ->label(__('label.setting.system.is_invite_pre_email_and_username')) ->helperText(__('label.setting.system.is_invite_pre_email_and_username_help')) , + Forms\Components\Select::make('system.access_admin_class_min') + ->options(User::listClass(User::CLASS_VIP)) + ->label(__('label.setting.system.access_admin_class_min')) + ->helperText(__('label.setting.system.access_admin_class_min_help')) + , ])->columns(2); $tabs = apply_filter('nexus_setting_tabs', $tabs); diff --git a/app/Models/User.php b/app/Models/User.php index 0fd3c0c25..649818289 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -547,7 +547,7 @@ public function updateWithComment(array $update, $comment, $commentField): bool public function canAccessAdmin(): bool { - $targetClass = self::CLASS_ADMINISTRATOR; + $targetClass = self::getAccessAdminClassMin(); if (!$this->class || $this->class < $targetClass) { do_log(sprintf('user: %s, no class or class < %s, can not access admin.', $this->id, $targetClass)); return false; @@ -555,6 +555,11 @@ public function canAccessAdmin(): bool return true; } + public static function getAccessAdminClassMin() + { + return Setting::get("system.access_admin_class_min") ?: User::CLASS_ADMINISTRATOR; + } + public function isDonating(): bool { $rawDonorUntil = $this->getRawOriginal('donoruntil'); diff --git a/include/constants.php b/include/constants.php index 3f30d339d..a584af428 100644 --- a/include/constants.php +++ b/include/constants.php @@ -1,6 +1,6 @@ '.$lang_functions['text_attended'].'', $attendance->points, $CURUSER['attendance_card']); }else{ printf(' %s', $lang_functions['text_attendance']);}?> [] []: where('inviter', $CURUSER['id'])->where('invitee', '')->where('expired_at', '>', now())->count())?> - = \App\Models\User::CLASS_ADMINISTRATOR) printf('[%s]', nexus_env('FILAMENT_PATH', 'nexusphp'), $lang_functions['text_management_system'])?> + = \App\Models\User::getAccessAdminClassMin()) printf('[%s]', nexus_env('FILAMENT_PATH', 'nexusphp'), $lang_functions['text_management_system'])?>
diff --git a/nexus/Install/settings.default.php b/nexus/Install/settings.default.php index 2d0b9b3a6..88665e1e9 100644 --- a/nexus/Install/settings.default.php +++ b/nexus/Install/settings.default.php @@ -451,5 +451,6 @@ 'cookie_valid_days' => 365, 'maximum_upload_speed' => 8000, 'is_invite_pre_email_and_username' => 'No', + 'access_admin_class_min' => User::CLASS_ADMINISTRATOR, ], ); diff --git a/resources/lang/en/label.php b/resources/lang/en/label.php index c0888677e..5566176e2 100644 --- a/resources/lang/en/label.php +++ b/resources/lang/en/label.php @@ -104,6 +104,8 @@ 'maximum_upload_speed_help' => 'A single torrent upload speed exceeding this value is instantly disabled for the account, in Mbps. For example: 100 Mbps = 12.5 MB/s', 'is_invite_pre_email_and_username' => 'Invite whether to pre-book an email and username', 'is_invite_pre_email_and_username_help' => "Default: 'No'. If pre-booked, email and username may not be changed when the user registers.", + 'access_admin_class_min' => 'Minimum class for logging into admin backend', + 'access_admin_class_min_help' => 'Default: administrator, users with a user class greater than or equal to the set value can log into the admin backend', ], ], 'user' => [ diff --git a/resources/lang/zh_CN/label.php b/resources/lang/zh_CN/label.php index 0f6bbbe7c..59949b37f 100644 --- a/resources/lang/zh_CN/label.php +++ b/resources/lang/zh_CN/label.php @@ -104,6 +104,8 @@ 'maximum_upload_speed_help' => '单种上传速度超过此值账号即刻禁用,单位 Mbps。如:100 Mbps = 12.5 MB/s', 'is_invite_pre_email_and_username' => '邀请是否预定邮箱和用户名', 'is_invite_pre_email_and_username_help' => "默认: 'No'。若预定,用户注册时不可修改邮箱和用户名", + 'access_admin_class_min' => '登录管理后台最小等级', + 'access_admin_class_min_help' => '默认:管理员,用户等级大于等于设定值的用户可以登录管理后台', ], ], 'user' => [ diff --git a/resources/lang/zh_TW/label.php b/resources/lang/zh_TW/label.php index a85f77f3d..5e92f96dd 100644 --- a/resources/lang/zh_TW/label.php +++ b/resources/lang/zh_TW/label.php @@ -104,6 +104,8 @@ 'maximum_upload_speed_help' => '單種上傳速度超過此值賬號即刻禁用,單位 Mbps。如:100 Mbps = 12.5 MB/s', 'is_invite_pre_email_and_username' => '邀請是否預定郵箱和用戶名', 'is_invite_pre_email_and_username_help' => "默認: 'No'。若預定,用戶註冊時不可修改郵箱和用戶名", + 'access_admin_class_min' => '登錄管理後臺最小等級', + 'access_admin_class_min_help' => '默認:管理員,用戶等級大於等於設定值的用戶可以登錄管理後臺', ], ], 'user' => [