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/framework/agent/SystemAgentBridgeGuard.java |   47 ++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/agent/SystemAgentBridgeGuard.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/agent/SystemAgentBridgeGuard.java
index c5514ee..b50e361 100644
--- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/agent/SystemAgentBridgeGuard.java
+++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/framework/agent/SystemAgentBridgeGuard.java
@@ -2,7 +2,6 @@
 
 import cn.iocoder.yudao.framework.security.core.service.SecurityFrameworkService;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
-import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
 import jakarta.annotation.Resource;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpStatus;
@@ -32,6 +31,8 @@
 
     @Resource
     private SecurityFrameworkService securityFrameworkService;
+    @Resource
+    private SystemAgentDelegationService delegationService;
 
     public void verifyServiceToken(String provided) {
         if (bridgeServiceToken == null || bridgeServiceToken.isBlank() || provided == null
@@ -40,6 +41,16 @@
             throw new AgentBridgeException(HttpStatus.FORBIDDEN, "SERVICE_TOKEN_INVALID",
                     "鏅鸿兘浣撴湇鍔¤韩浠芥棤鏁堬紝璇锋鏌ユ湇鍔″瘑閽ラ厤缃�");
         }
+    }
+
+    /** 鍙‘璁ゆ湇鍔¤韩浠戒笌褰撳墠鐧诲綍鐢ㄦ埛锛涘叿浣撹兘鍔涚敱璋冪敤鏂归�愰」鏀剁揣銆� */
+    public AgentPrincipal requireAuthenticated(String providedServiceToken) {
+        verifyServiceToken(providedServiceToken);
+        Long userId = SecurityFrameworkUtils.getLoginUserId();
+        if (userId == null) {
+            throw new AgentBridgeException(HttpStatus.UNAUTHORIZED, "UNAUTHORIZED", "鏈櫥褰曟垨鐧诲綍宸茶繃鏈�");
+        }
+        return principalOf(userId);
     }
 
     public AgentPrincipal require(String providedServiceToken, String permission) {
@@ -55,6 +66,15 @@
         return principalOf(userId);
     }
 
+    public AgentPrincipal require(String providedServiceToken, String delegationToken, String taskId,
+                                  String operation, String permission, String moduleId, Long attachmentId) {
+        verifyServiceToken(providedServiceToken);
+        if (delegationToken != null && !delegationToken.isBlank()) {
+            return delegationService.require(delegationToken, taskId, operation, permission, moduleId, attachmentId);
+        }
+        return require(providedServiceToken, permission);
+    }
+
     /** 浼氳瘽涓庨檮浠跺叆鍙f棤娉曢鐭ユā鍧楋紝鍙姹傚叿澶囦换鎰忎竴椤瑰鍏ユ潈闄愩�� */
     public AgentPrincipal requireAny(String providedServiceToken) {
         verifyServiceToken(providedServiceToken);
@@ -68,8 +88,29 @@
         return principalOf(userId);
     }
 
+
+    public AgentPrincipal requireAny(String providedServiceToken, String delegationToken, String taskId,
+                                     String operation, String moduleId, Long attachmentId) {
+        if (delegationToken == null || delegationToken.isBlank()) {
+            return requireAny(providedServiceToken);
+        }
+        verifyServiceToken(providedServiceToken);
+        AgentBridgeException last = null;
+        for (String permission : IMPORT_PERMISSIONS) {
+            try {
+                return delegationService.require(delegationToken, taskId, operation, permission, moduleId, attachmentId);
+            } catch (AgentBridgeException ex) {
+                last = ex;
+                if (!"DELEGATION_SCOPE_MISMATCH".equals(ex.getErrorCode())
+                        && !"DELEGATION_PERMISSION_REVOKED".equals(ex.getErrorCode())) {
+                    throw ex;
+                }
+            }
+        }
+        throw last == null ? new AgentBridgeException(HttpStatus.FORBIDDEN, "FORBIDDEN", "濮旀墭绁ㄦ嵁鏉冮檺涓嶈冻") : last;
+    }
+
     private AgentPrincipal principalOf(Long userId) {
-        Long tenantId = TenantContextHolder.getTenantId();
-        return new AgentPrincipal(userId, tenantId == null ? 0L : tenantId, "live");
+        return new AgentPrincipal(userId, "live");
     }
 }

--
Gitblit v1.9.3