Prechádzať zdrojové kódy

fix: 操作日志列表不再匿名可查,清空日志需要独立权限

- GET /systemLog/list 去掉 @SaIgnore:原来匿名可查全量操作日志
  (含操作人、请求参数),现需登录
- POST /systemLog/clear 增加 @SaCheckPermission('systemLog.clear'):
  原来任何登录者可清空审计痕迹
- 新增 v22 迁移脚本:systemLog.clear 权限记录 + 超管自动授权,
  其他角色可在角色管理中勾选

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 3 týždňov pred
rodič
commit
f1cecc2a97

+ 2 - 2
car-wash-admin/src/main/java/com/kym/admin/controller/SystemLogController.java

@@ -1,10 +1,10 @@
 package com.kym.admin.controller;
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.kym.common.R;
 import com.kym.common.annotation.SysLog;
 import com.kym.entity.queryParams.SystemLogQueryParam;
 import com.kym.service.SystemLogService;
-import cn.dev33.satoken.annotation.SaIgnore;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -26,12 +26,12 @@ public class SystemLogController {
     }
 
     @SysLog("查询操作日志列表")
-    @SaIgnore
     @GetMapping("/list")
     R<?> list(SystemLogQueryParam params) {
         return R.success(systemLogService.listSystemLog(params));
     }
 
+    @SaCheckPermission("systemLog.clear")
     @SysLog("清空操作日志")
     @PostMapping("/clear")
     R<?> clear() {

+ 41 - 0
car-wash-entity/src/main/resources/sql/v22_add_system_log_clear_permission.sql

@@ -0,0 +1,41 @@
+-- ====================================================
+-- v22: 新增 systemLog.clear 权限(清空操作日志)
+-- 背景:SystemLogController.clear 将增加
+--       @SaCheckPermission("systemLog.clear") 注解,
+--       需要先补齐权限数据,避免超管被 403 拦截。
+-- ====================================================
+
+DROP PROCEDURE IF EXISTS add_system_log_clear_permission;
+DELIMITER //
+CREATE PROCEDURE add_system_log_clear_permission()
+BEGIN
+    IF NOT EXISTS (
+        SELECT 1 FROM information_schema.TABLES
+        WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_permission'
+    ) THEN
+        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 't_permission 表不存在,请先执行 init.sql';
+    END IF;
+
+    -- 1. 新增权限记录(幂等)
+    IF NOT EXISTS (
+        SELECT 1 FROM t_permission WHERE value = 'systemLog.clear'
+    ) THEN
+        INSERT INTO `t_permission` (`id`, `company_id`, `name`, `value`, `pid`, `weight`)
+        VALUES (94, NULL, '清空操作日志', 'systemLog.clear', 0, 150);
+    END IF;
+
+    -- 2. 超管角色(id=1)补齐该权限(管道分隔权限字符串,幂等)
+    UPDATE `t_role`
+    SET `permissions` = CONCAT(IFNULL(`permissions`, ''), '|systemLog.clear')
+    WHERE `id` = 1
+      AND FIND_IN_SET('systemLog.clear', REPLACE(IFNULL(`permissions`, ''), '|', ',')) = 0;
+END //
+DELIMITER ;
+CALL add_system_log_clear_permission();
+DROP PROCEDURE IF EXISTS add_system_log_clear_permission;
+
+-- ====================================================
+-- 验证:
+--   SELECT * FROM t_permission WHERE value = 'systemLog.clear';
+--   SELECT permissions FROM t_role WHERE id = 1;
+-- ====================================================