From 95ae0c83d2aa58d86b4039e3f7f16ee93afb8f00 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 23 十月 2026 17:01:00 +0800
Subject: [PATCH] feat(ai): 完善模型管理和智能体导入功能
---
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/agent/SystemAgentImportBridgeController.java | 55 +++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 47 insertions(+), 8 deletions(-)
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/agent/SystemAgentImportBridgeController.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/agent/SystemAgentImportBridgeController.java
index bbba5e3..f92a84e 100644
--- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/agent/SystemAgentImportBridgeController.java
+++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/agent/SystemAgentImportBridgeController.java
@@ -31,49 +31,88 @@
private static final Set<String> ACTIONS = Set.of("material_import.prepare", "material_import.read",
"material_import.review", "material_import.preflight", "material_import.commit",
- "material_import.read_receipt");
+ "material_import.read_receipt",
+ "conversation.create", "conversation.read", "conversation.message",
+ "conversation.action", "conversation.report");
+
+ /** module_id 鈫� 涓氬姟瀵煎叆鏉冮檺锛汸ython 浠ユā鍧� ID 浣滀负鎺堟潈 resource銆� */
+ private static final Map<String, String> MODULE_PERMISSIONS = Map.of(
+ "mdm.item", SystemAgentBridgeGuard.PERMISSION_ITEM_IMPORT,
+ "srm.supplier", "srm:supplier:create",
+ "mes.bom", "mes:md-item:create",
+ "mes.qc-template", "mes:qc-template:create",
+ "mes.mps", "mes:pro-mps:create",
+ "mes.route", "mes:pro-route:create");
@Resource
private SystemAgentImportBridgeService bridgeService;
@Resource
private SystemAgentBridgeGuard bridgeGuard;
+ private static final String IMPORT_PERMISSIONS_EXPR =
+ "@ss.hasAnyPermissions('mdm:item:import','srm:supplier:create','mes:md-item:create',"
+ + "'mes:qc-template:create','mes:pro-mps:create','mes:pro-route:create')";
+
@PostMapping("/import-sessions")
- @PreAuthorize("@ss.hasPermission('mdm:item:import')")
+ @PreAuthorize(IMPORT_PERMISSIONS_EXPR)
public CommonResult<Long> createSession() {
return success(bridgeService.createSession());
}
@PostMapping("/import-sessions/{sessionId}/attachments")
- @PreAuthorize("@ss.hasPermission('mdm:item:import')")
+ @PreAuthorize(IMPORT_PERMISSIONS_EXPR)
public CommonResult<Long> bindAttachment(@PathVariable Long sessionId, @Valid @RequestBody BindRequest request) {
return success(bridgeService.bindAttachment(sessionId, request.getBlobId()));
}
+ @DeleteMapping("/attachments/{attachmentId}")
+ public CommonResult<Boolean> deleteAttachment(
+ @RequestHeader(value = "X-Agent-Service-Token", required = false) String serviceToken,
+ @RequestHeader(value = "X-Agent-Delegation-Token", required = false) String delegationToken,
+ @RequestHeader(value = "X-Agent-Task-Id", required = false) String taskId,
+ @PathVariable Long attachmentId) {
+ bridgeGuard.requireAny(serviceToken, delegationToken, taskId, "attachment.delete", null, attachmentId);
+ bridgeService.deleteImportAttachment(attachmentId);
+ return success(true);
+ }
+
@PostMapping("/authorize")
- @PreAuthorize("@ss.hasPermission('mdm:item:import')")
public CommonResult<Map<String, String>> authorize(
@RequestHeader(value = "X-Agent-Service-Token", required = false) String serviceToken,
+ @RequestHeader(value = "X-Agent-Delegation-Token", required = false) String delegationToken,
+ @RequestHeader(value = "X-Agent-Task-Id", required = false) String taskId,
@Valid @RequestBody AuthorizeRequest request) {
- AgentPrincipal principal = bridgeGuard.require(serviceToken, SystemAgentBridgeGuard.PERMISSION_ITEM_IMPORT);
if (!ACTIONS.contains(request.getAction())) {
throw new AgentBridgeException(HttpStatus.FORBIDDEN, "ACTION_FORBIDDEN", "涓嶆敮鎸佺殑鏅鸿兘浣撴搷浣�");
+ }
+ AgentPrincipal principal;
+ if (request.getAction().startsWith("conversation.")) {
+ String permission = MODULE_PERMISSIONS.get(request.getResource());
+ principal = permission == null
+ ? bridgeGuard.requireAny(serviceToken, delegationToken, taskId, request.getAction(),
+ request.getResource(), null)
+ : bridgeGuard.require(serviceToken, delegationToken, taskId, request.getAction(), permission,
+ request.getResource(), null);
+ } else {
+ principal = bridgeGuard.require(serviceToken, delegationToken, taskId, request.getAction(),
+ SystemAgentBridgeGuard.PERMISSION_ITEM_IMPORT, "mdm.item",
+ requiresAttachmentOwnership(request.getAction()) ? parseId(request.getResource()) : null);
}
if (requiresAttachmentOwnership(request.getAction())) {
bridgeService.requireOwnedAttachmentRef(parseId(request.getResource()));
}
// read/review/read_receipt 鐨勪换鍔� UUID 鎵�鏈夋潈鐢� Python checkpoint 浣滅敤鍩熸牳楠岋紱鏈閲嶆煡褰撳墠鎸夐挳鏉冮檺銆�
return success(Map.of("user_id", String.valueOf(principal.userId()),
- "tenant_id", String.valueOf(principal.tenantId()),
"policy_revision", principal.policyRevision()));
}
@GetMapping("/attachments/{attachmentId}")
- @PreAuthorize("@ss.hasPermission('mdm:item:import')")
public ResponseEntity<FileSystemResource> downloadAttachment(
@RequestHeader(value = "X-Agent-Service-Token", required = false) String serviceToken,
+ @RequestHeader(value = "X-Agent-Delegation-Token", required = false) String delegationToken,
+ @RequestHeader(value = "X-Agent-Task-Id", required = false) String taskId,
@PathVariable Long attachmentId) {
- bridgeGuard.require(serviceToken, SystemAgentBridgeGuard.PERMISSION_ITEM_IMPORT);
+ bridgeGuard.requireAny(serviceToken, delegationToken, taskId, "attachment.read", null, attachmentId);
SystemAgentAttachmentRef ref = bridgeService.requireOwnedAttachmentRef(attachmentId);
return ResponseEntity.ok().contentType(MediaType.APPLICATION_OCTET_STREAM)
.contentLength(ref.byteSize())
--
Gitblit v1.9.3