From 6cff7a934b2c925b89fb38ac47736bfc28295702 Mon Sep 17 00:00:00 2001 From: qhd <1766646056@qq.com> Date: Sat, 29 Aug 2026 14:38:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=B3=BB=E7=BB=9F=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E8=A2=AB=E5=BC=95=E7=94=A8=E6=8B=92=E5=88=A0=EF=BC=8C=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=20apiKey=20=E5=AF=B9=E9=9D=9E=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E8=80=85=E8=84=B1=E6=95=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Delete:系统模型被引用 → 拒绝;引用行/自有行仅创建者可删 - List/Get:系统模型 apiKey 对非创建者返回空 Co-Authored-By: Claude --- service/model_manage_service.go | 48 +++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/service/model_manage_service.go b/service/model_manage_service.go index 1142f98..87006b8 100644 --- a/service/model_manage_service.go +++ b/service/model_manage_service.go @@ -238,9 +238,36 @@ func (s *modelManageService) CancelChatModel(ctx context.Context, modelType mode return } -// Delete 删除模型 +// Delete 删除模型:系统模型被引用 → 拒绝;引用行/自有行仅创建者可删 func (s *modelManageService) Delete(ctx context.Context, req *dto.DeleteModelManageReq) error { - _, err := dao.ModelManage.Delete(ctx, req) + user, err := utils.GetUserInfo(ctx) + if err != nil { + return err + } + get, err := dao.ModelManage.GetNotTenantId(ctx, &dto.GetModelManageReq{Id: req.Id}) + if err != nil { + return err + } + if get == nil { + return nil + } + // 系统模型被引用 → 拒绝删除(防悬挂) + if get.SystemModel != nil && *get.SystemModel { + n, err := dao.ModelManage.CountReferences(ctx, get.Id) + if err != nil { + return err + } + if n > 0 { + return fmt.Errorf("系统模型已被 %d 个用户引用,不能删除", n) + } + _, err = dao.ModelManage.Delete(ctx, req) + return err + } + // 引用行/自有行:仅创建者可删(删引用行即解除引用) + if get.Creator != user.UserName { + return fmt.Errorf("无权限操作") + } + _, err = dao.ModelManage.Delete(ctx, req) return err } @@ -249,6 +276,17 @@ func (s *modelManageService) Get(ctx context.Context, req *dto.GetModelManageReq if err != nil { return } + if get == nil { + return new(dto.GetModelManageRes), nil + } + // 系统模型 apiKey 对非创建者脱敏(引用行/自有行仅本人可见) + user, err := utils.GetUserInfo(ctx) + if err != nil { + return + } + if get.SystemModel != nil && *get.SystemModel && get.Creator != user.UserName { + get.ApiKey = "" + } res = new(dto.GetModelManageRes) err = gconv.Struct(get, &res.ModelManage) return @@ -294,6 +332,12 @@ func (s *modelManageService) List(ctx context.Context, req *dto.ListModelManageR if err != nil { return } + // 系统模型 apiKey 对非创建者脱敏(引用行/自有行仅本人可见) + for _, row := range list { + if row.SystemModel != nil && *row.SystemModel && row.Creator != user.UserName { + row.ApiKey = "" + } + } res = &dto.ListModelManageRes{ Total: total, }