diff --git a/par-api/src/main/java/com/par/api/controller/RiskRuleController.java b/par-api/src/main/java/com/par/api/controller/RiskRuleController.java index 08f1584..9a5a6a8 100644 --- a/par-api/src/main/java/com/par/api/controller/RiskRuleController.java +++ b/par-api/src/main/java/com/par/api/controller/RiskRuleController.java @@ -17,6 +17,7 @@ import java.util.Map; public class RiskRuleController { private final RiskRuleService riskRuleService; + private final com.par.core.storage.CachedStorageService storageService; @GetMapping("/api/v1/risk-rules/{siteType}") public ResponseEntity getRules(@PathVariable String siteType, @@ -38,6 +39,19 @@ public class RiskRuleController { return ApiResponse.success(); } + /** 发布风险规则到云存储 */ + @PostMapping("/api/v1/risk-rules/{siteType}/upload") + public ApiResponse uploadRules(@PathVariable String siteType, + @RequestBody Map payload) { + @SuppressWarnings("unchecked") + var rules = (List>) payload.get("rules"); + if (rules == null || rules.isEmpty()) return ApiResponse.error(400, "rules is required"); + riskRuleService.saveRules(siteType, rules); + String json = new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(rules); + storageService.store("rules/" + siteType + ".json", json); + return ApiResponse.success(); + } + @GetMapping("/api/v1/admin/risk-rules") public ApiResponse>> adminList(HttpServletRequest request) { checkAdmin(request); @@ -93,6 +107,19 @@ public class RiskRuleController { return ApiResponse.success(); } + /** 发布默认风险规则到云存储 */ + @PostMapping("/api/v1/admin/default-rules/{type}/upload") + public ApiResponse uploadDefaultRules( + @PathVariable String type, @RequestBody Map payload, HttpServletRequest request) { + checkAdmin(request); + @SuppressWarnings("unchecked") + var rules = (List>) payload.get("rules"); + riskRuleService.saveRules("default:" + type, rules != null ? rules : List.of()); + String json = new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(rules); + storageService.store("rules/default/" + type + ".json", json); + return ApiResponse.success(); + } + private void checkAdmin(HttpServletRequest request) { var level = request.getAttribute("trustLevel"); if (level == null || !"ADMIN".equals(level.toString())) { diff --git a/web/src/views/RiskRules.vue b/web/src/views/RiskRules.vue index 48a7a59..0ef5e95 100644 --- a/web/src/views/RiskRules.vue +++ b/web/src/views/RiskRules.vue @@ -32,6 +32,7 @@

编辑: {{ editType }}

保存 + 上传 返回列表
@@ -80,7 +81,7 @@