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