From ba1c94e0f7c9b3767ad23034156a8aeb84d464a0 Mon Sep 17 00:00:00 2001 From: lkddi Date: Thu, 26 Feb 2026 22:38:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=8C=89=E7=AD=89=E7=BA=A7=E7=8B=AC=E7=AB=8B?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=EF=BC=8C=E6=9F=A5=E7=9C=8B=E7=A7=81=E4=BF=A1?= =?UTF-8?q?=E4=BB=85=E7=AB=99=E9=95=BF=E5=8F=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 level_warn(警告等级) 和 level_freeze(冻结等级) 系统参数 - AdminCommandController 各操作使用独立等级检查 - 弹窗各按钮按 sysparam 等级条件独立显示/隐藏 - 查看私信(🔍)仅 superlevel 站长可见 - 后台系统参数可配置各操作所需等级 --- .../Controllers/AdminCommandController.php | 29 +++++----- ...26_143645_add_warn_freeze_level_params.php | 49 ++++++++++++++++ resources/views/chat/frame.blade.php | 57 ++++++++++++------- 3 files changed, 100 insertions(+), 35 deletions(-) create mode 100644 database/migrations/2026_02_26_143645_add_warn_freeze_level_params.php diff --git a/app/Http/Controllers/AdminCommandController.php b/app/Http/Controllers/AdminCommandController.php index 0efd26a..ee0c4da 100644 --- a/app/Http/Controllers/AdminCommandController.php +++ b/app/Http/Controllers/AdminCommandController.php @@ -56,8 +56,8 @@ class AdminCommandController extends Controller $roomId = $request->input('room_id'); $reason = $request->input('reason', '请注意言行'); - // 权限检查 - if (! $this->canManage($admin, $targetUsername)) { + // 权限检查(等级由 level_warn 配置) + if (! $this->canExecute($admin, $targetUsername, 'level_warn', '5')) { return response()->json(['status' => 'error', 'message' => '权限不足'], 403); } @@ -101,7 +101,8 @@ class AdminCommandController extends Controller $roomId = $request->input('room_id'); $reason = $request->input('reason', '违反聊天室规则'); - if (! $this->canManage($admin, $targetUsername)) { + // 权限检查(等级由 level_kick 配置) + if (! $this->canExecute($admin, $targetUsername, 'level_kick', '10')) { return response()->json(['status' => 'error', 'message' => '权限不足'], 403); } @@ -151,7 +152,8 @@ class AdminCommandController extends Controller $roomId = $request->input('room_id'); $duration = $request->input('duration'); - if (! $this->canManage($admin, $targetUsername)) { + // 权限检查(等级由 level_mute 配置) + if (! $this->canExecute($admin, $targetUsername, 'level_mute', '8')) { return response()->json(['status' => 'error', 'message' => '权限不足'], 403); } @@ -202,7 +204,8 @@ class AdminCommandController extends Controller $roomId = $request->input('room_id'); $reason = $request->input('reason', '违反聊天室规则'); - if (! $this->canManage($admin, $targetUsername)) { + // 权限检查(等级由 level_freeze 配置) + if (! $this->canExecute($admin, $targetUsername, 'level_freeze', '14')) { return response()->json(['status' => 'error', 'message' => '权限不足'], 403); } @@ -321,21 +324,21 @@ class AdminCommandController extends Controller } /** - * 权限检查:管理员是否可管理目标用户 + * 权限检查:管理员是否可对目标用户执行指定操作 * - * 管理员等级必须高于目标用户等级,且不能操作自己。 + * 根据 sysparam 中配置的等级门槛判断权限。 * * @param User $admin 管理员用户 * @param string $targetUsername 目标用户名 + * @param string $levelKey sysparam 中的等级键名(如 level_kick、level_warn) + * @param string $defaultLevel 默认等级值 * @return bool 是否有权限 */ - private function canManage(User $admin, string $targetUsername): bool + private function canExecute(User $admin, string $targetUsername, string $levelKey, string $defaultLevel = '5'): bool { - $superLevel = (int) Sysparam::getValue('superlevel', '100'); - - // 必须是管理员(达到踢人等级) - $kickLevel = (int) Sysparam::getValue('level_kick', '5'); - if ($admin->user_level < $kickLevel) { + // 必须达到该操作所需的最低等级 + $requiredLevel = (int) Sysparam::getValue($levelKey, $defaultLevel); + if ($admin->user_level < $requiredLevel) { return false; } diff --git a/database/migrations/2026_02_26_143645_add_warn_freeze_level_params.php b/database/migrations/2026_02_26_143645_add_warn_freeze_level_params.php new file mode 100644 index 0000000..f7ef054 --- /dev/null +++ b/database/migrations/2026_02_26_143645_add_warn_freeze_level_params.php @@ -0,0 +1,49 @@ +insertOrIgnore([ + [ + 'alias' => 'level_warn', + 'body' => '5', + 'guidetxt' => '警告所需等级(管理员可在聊天室警告用户的最低等级)', + 'created_at' => $now, + 'updated_at' => $now, + ], + [ + 'alias' => 'level_freeze', + 'body' => '14', + 'guidetxt' => '冻结账号所需等级(管理员可冻结用户账号的最低等级)', + 'created_at' => $now, + 'updated_at' => $now, + ], + ]); + } + + /** + * 回滚:删除补充的参数记录 + */ + public function down(): void + { + DB::table('sysparam')->whereIn('alias', [ + 'level_warn', + 'level_freeze', + ])->delete(); + } +}; diff --git a/resources/views/chat/frame.blade.php b/resources/views/chat/frame.blade.php index 6e66ed5..c7659b1 100644 --- a/resources/views/chat/frame.blade.php +++ b/resources/views/chat/frame.blade.php @@ -17,11 +17,14 @@ @php // 从 sysparam 读取权限等级配置 - $levelKick = (int) \App\Models\Sysparam::getValue('level_kick', '60'); - $levelMute = (int) \App\Models\Sysparam::getValue('level_mute', '50'); - $levelBan = (int) \App\Models\Sysparam::getValue('level_ban', '80'); - $levelBanip = (int) \App\Models\Sysparam::getValue('level_banip', '90'); + $levelWarn = (int) \App\Models\Sysparam::getValue('level_warn', '5'); + $levelKick = (int) \App\Models\Sysparam::getValue('level_kick', '10'); + $levelMute = (int) \App\Models\Sysparam::getValue('level_mute', '8'); + $levelBan = (int) \App\Models\Sysparam::getValue('level_ban', '12'); + $levelBanip = (int) \App\Models\Sysparam::getValue('level_banip', '14'); + $levelFreeze = (int) \App\Models\Sysparam::getValue('level_freeze', '14'); $superLevel = (int) \App\Models\Sysparam::getValue('superlevel', '100'); + $myLevel = Auth::user()->user_level; @endphp