聊天室管理权限统一为职务权限
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user