优化:管理操作按等级独立显示,查看私信仅站长可用

- 新增 level_warn(警告等级) 和 level_freeze(冻结等级) 系统参数
- AdminCommandController 各操作使用独立等级检查
- 弹窗各按钮按 sysparam 等级条件独立显示/隐藏
- 查看私信(🔍)仅 superlevel 站长可见
- 后台系统参数可配置各操作所需等级
This commit is contained in:
2026-02-26 22:38:33 +08:00
parent 5722d5be25
commit ba1c94e0f7
3 changed files with 100 additions and 35 deletions

View File

@@ -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;
}