聊天室管理权限统一为职务权限

This commit is contained in:
2026-04-26 20:55:11 +08:00
parent b07f4e971a
commit 0402097b59
21 changed files with 590 additions and 395 deletions
@@ -442,6 +442,7 @@
权限管理
<span class="font-normal text-amber-700 ml-1">(控制聊天室输入框上方「管理」菜单中可见的功能按钮)</span>
</h4>
<p class="mb-3 text-xs leading-5 text-amber-700">聊天室管理动作已统一按职务权限控制,不再使用等级阈值参数。</p>
<div class="space-y-4">
@foreach ($positionPermissions as $groupName => $permissions)
<div>
-11
View File
@@ -17,13 +17,6 @@
<meta name="csrf-token" content="{{ csrf_token() }}">
<meta http-equiv="Delegate-CH" content="Sec-CH-UA https://s.magsrv.com; Sec-CH-UA-Mobile https://s.magsrv.com; Sec-CH-UA-Arch https://s.magsrv.com; Sec-CH-UA-Model https://s.magsrv.com; Sec-CH-UA-Platform https://s.magsrv.com; Sec-CH-UA-Platform-Version https://s.magsrv.com; Sec-CH-UA-Bitness https://s.magsrv.com; Sec-CH-UA-Full-Version-List https://s.magsrv.com; Sec-CH-UA-Full-Version https://s.magsrv.com;">
@php
// 从 sysparam 读取权限等级配置
$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;
$positionPermissions = array_keys(array_filter($roomPermissionMap ?? []));
@@ -64,10 +57,6 @@
'userSex' => match ((int) $user->sex) {1 => '男', 2 => '女', default => ''},
'userLevel' => $user->user_level,
'superLevel' => $superLevel,
'levelKick' => $levelKick,
'levelMute' => $levelMute,
'levelBan' => $levelBan,
'levelBanip' => $levelBanip,
'sendUrl' => route('chat.send', $room->id),
'leaveUrl' => route('chat.leave', $room->id),
'expiredLeaveUrl' => \Illuminate\Support\Facades\URL::temporarySignedRoute('chat.leave.expired', now()->addHours(12), ['id' => $room->id, 'user' => $user->id]),
@@ -4,8 +4,7 @@
第二行:输入框 + 发送按钮
frame.blade.php 拆分,便于独立维护
依赖变量:$user, $room, $levelKick, $levelMute, $levelBan, $levelBanip,
$roomPermissionMap, $hasRoomManagementPermission
依赖变量:$user, $room, $roomPermissionMap, $hasRoomManagementPermission
--}}
@php
@@ -418,9 +418,10 @@
$canWarnUser = Auth::id() === 1 || (($roomPermissionMap[\App\Support\PositionPermissionRegistry::USER_WARN] ?? false) === true);
$canKickUser = Auth::id() === 1 || (($roomPermissionMap[\App\Support\PositionPermissionRegistry::USER_KICK] ?? false) === true);
$canMuteUser = Auth::id() === 1 || (($roomPermissionMap[\App\Support\PositionPermissionRegistry::USER_MUTE] ?? false) === true);
$canFreezeUser = Auth::id() === 1 || (($roomPermissionMap[\App\Support\PositionPermissionRegistry::USER_FREEZE] ?? false) === true);
$canBanUser = Auth::id() === 1 || (($roomPermissionMap[\App\Support\PositionPermissionRegistry::USER_BAN] ?? false) === true);
$canBanIpUser = Auth::id() === 1 || (($roomPermissionMap[\App\Support\PositionPermissionRegistry::USER_BANIP] ?? false) === true);
$canRewardUser = Auth::id() === 1 || (($roomPermissionMap[\App\Support\PositionPermissionRegistry::ROOM_REWARD] ?? false) === true);
$hasUserModerationPermission = $canWarnUser || $canKickUser || $canMuteUser || $canFreezeUser;
$hasUserModerationPermission = $canWarnUser || $canKickUser || $canMuteUser || $canBanUser || $canBanIpUser;
$hasPositionActions = Auth::user()->activePosition || $myLevel >= $superLevel;
@endphp
@if ($hasUserModerationPermission || $hasPositionActions)
@@ -463,10 +464,16 @@
x-on:click="isMuting = !isMuting">🔇 禁言
</button>
@endif
@if ($canFreezeUser)
@if ($canBanUser)
<button
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #dbeafe; border: 1px solid #3b82f6; cursor: pointer;"
x-on:click="freezeUser()">🧊 冻结
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #fee2e2; border: 1px solid #b91c1c; cursor: pointer;"
x-on:click="banUser()"> 封号
</button>
@endif
@if ($canBanIpUser)
<button
style="flex:1; padding: 5px; border-radius: 4px; font-size: 11px; background: #ffedd5; border: 1px solid #c2410c; cursor: pointer;"
x-on:click="banIpUser()">🌐 封IP
</button>
@endif
+15 -14
View File
@@ -62,12 +62,6 @@
$charmSame = Sysparam::getValue('charm_same_sex', '1');
$charmLimit = Sysparam::getValue('charm_hourly_limit', '20');
// 管理权限等级
$levelWarn = (int) Sysparam::getValue('level_warn', '5');
$levelMute = (int) Sysparam::getValue('level_mute', '8');
$levelKick = (int) Sysparam::getValue('level_kick', '10');
$levelFreeze = (int) Sysparam::getValue('level_freeze', '14');
// 排行榜配置
$lbLimit = (int) Sysparam::getValue('leaderboard_limit', '50');
@@ -480,35 +474,42 @@
<section id="sec-admin" class="bg-white rounded-2xl shadow-sm border border-gray-100 p-6 mb-6">
<h2 class="text-xl font-bold text-red-700 mb-4 flex items-center gap-2">🛡️ 管理权限</h2>
<p class="text-sm text-gray-600 mb-4">等级越高,可使用的管理功能越多。双击用户名片可执行以下操作:</p>
<p class="text-sm text-gray-600 mb-4">聊天室管理动作已统一按职务权限控制。被任命到具备对应权限的职务后,双击用户名片可执行以下操作:</p>
<div class="space-y-2">
<div class="flex items-center gap-3 bg-yellow-50 rounded-lg px-4 py-3">
<span class="text-lg">⚠️</span>
<div>
<span class="font-bold text-gray-800">警告用户</span>
<span class="text-xs text-gray-500 ml-2"> LV.{{ $levelWarn }} 以上</span>
<span class="text-xs text-gray-500 ml-2">具备“警告用户”职务权限</span>
</div>
</div>
<div class="flex items-center gap-3 bg-indigo-50 rounded-lg px-4 py-3">
<span class="text-lg">🔇</span>
<div>
<span class="font-bold text-gray-800">禁言用户</span>
<span class="text-xs text-gray-500 ml-2"> LV.{{ $levelMute }} 以上</span>
<span class="text-xs text-gray-500 ml-2">具备“禁言用户”职务权限</span>
</div>
</div>
<div class="flex items-center gap-3 bg-red-50 rounded-lg px-4 py-3">
<span class="text-lg">🚫</span>
<div>
<span class="font-bold text-gray-800">踢出用户</span>
<span class="text-xs text-gray-500 ml-2"> LV.{{ $levelKick }} 以上</span>
<span class="text-xs text-gray-500 ml-2">具备“踢出用户”职务权限</span>
</div>
</div>
<div class="flex items-center gap-3 bg-blue-50 rounded-lg px-4 py-3">
<span class="text-lg">🧊</span>
<div class="flex items-center gap-3 bg-rose-50 rounded-lg px-4 py-3">
<span class="text-lg"></span>
<div>
<span class="font-bold text-gray-800">冻结账号</span>
<span class="text-xs text-gray-500 ml-2"> LV.{{ $levelFreeze }} 以上</span>
<span class="font-bold text-gray-800">封号用户</span>
<span class="text-xs text-gray-500 ml-2">具备“封号用户”职务权限</span>
</div>
</div>
<div class="flex items-center gap-3 bg-orange-50 rounded-lg px-4 py-3">
<span class="text-lg">🌐</span>
<div>
<span class="font-bold text-gray-800"> IP / 查看管理员网络信息</span>
<span class="text-xs text-gray-500 ml-2">需具备“封IP”职务权限</span>
</div>
</div>
</div>