Skip to content

Commit 10d5a75

Browse files
tpfztpfz
andauthored
[feat][evaluation]fix evaluator auth (#502)
fix evaluator 鉴权 Co-authored-by: tpfz <tpfz@bytedance.com>
1 parent 9745b7f commit 10d5a75

2 files changed

Lines changed: 81 additions & 2 deletions

File tree

backend/modules/evaluation/application/evaluator_app.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,18 @@ func (e *EvaluatorHandlerImpl) ListEvaluatorVersions(ctx context.Context, reques
595595
return nil, err
596596
}
597597
if evaluatorDO == nil {
598-
return nil, errorx.NewByCode(errno.EvaluatorNotExistCode)
598+
// 兼容预置评估器:预置评估器归属于 builtin 管理空间,用户当前 workspace 下查不到,
599+
// 此时判断是否为预置评估器;若是,则走 builtin 管理空间鉴权后放行。
600+
builtinEvaluatorDO, err := e.evaluatorService.GetBuiltinEvaluator(ctx, request.GetEvaluatorID())
601+
if err != nil {
602+
return nil, err
603+
}
604+
if builtinEvaluatorDO == nil {
605+
return nil, errorx.NewByCode(errno.EvaluatorNotExistCode)
606+
}
607+
if err := e.authBuiltinManagement(ctx, builtinEvaluatorDO.SpaceID, spaceTypeBuiltin, false); err != nil {
608+
return nil, err
609+
}
599610
}
600611
evaluatorDOList, total, err := e.evaluatorService.ListEvaluatorVersion(ctx, buildListEvaluatorVersionRequest(request))
601612
if err != nil {

backend/modules/evaluation/application/evaluator_app_test.go

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1273,15 +1273,18 @@ func TestEvaluatorHandlerImpl_ListEvaluatorVersions(t *testing.T) {
12731273
mockAuth := rpcmocks.NewMockIAuthProvider(ctrl)
12741274
mockEvaluatorService := mocks.NewMockEvaluatorService(ctrl)
12751275
mockUserInfoService := userinfomocks.NewMockUserInfoService(ctrl)
1276+
mockConfiger := confmocks.NewMockIConfiger(ctrl)
12761277

12771278
app := &EvaluatorHandlerImpl{
12781279
auth: mockAuth,
12791280
evaluatorService: mockEvaluatorService,
12801281
userInfoService: mockUserInfoService,
1282+
configer: mockConfiger,
12811283
}
12821284

12831285
workspaceID := int64(100)
12841286
evaluatorID := int64(200)
1287+
builtinSpaceID := int64(999)
12851288
evaluators := []*entity.Evaluator{
12861289
{
12871290
ID: evaluatorID,
@@ -1294,6 +1297,12 @@ func TestEvaluatorHandlerImpl_ListEvaluatorVersions(t *testing.T) {
12941297
},
12951298
},
12961299
}
1300+
builtinEvaluator := &entity.Evaluator{
1301+
ID: evaluatorID,
1302+
SpaceID: builtinSpaceID,
1303+
EvaluatorType: entity.EvaluatorTypePrompt,
1304+
Builtin: true,
1305+
}
12971306

12981307
tests := []struct {
12991308
name string
@@ -1332,7 +1341,7 @@ func TestEvaluatorHandlerImpl_ListEvaluatorVersions(t *testing.T) {
13321341
wantErrCode: errno.CommonNoPermissionCode,
13331342
},
13341343
{
1335-
name: "evaluator_not_in_workspace",
1344+
name: "evaluator_not_in_workspace_and_not_builtin",
13361345
req: &evaluatorservice.ListEvaluatorVersionsRequest{
13371346
WorkspaceID: workspaceID,
13381347
EvaluatorID: &evaluatorID,
@@ -1342,10 +1351,69 @@ func TestEvaluatorHandlerImpl_ListEvaluatorVersions(t *testing.T) {
13421351
// GetEvaluator 在 evaluator 不属于该 workspace 时返回 (nil, nil)
13431352
mockEvaluatorService.EXPECT().GetEvaluator(gomock.Any(), workspaceID, evaluatorID, false).
13441353
Return(nil, nil)
1354+
// 不是预置评估器时,GetBuiltinEvaluator 返回 (nil, nil)
1355+
mockEvaluatorService.EXPECT().GetBuiltinEvaluator(gomock.Any(), evaluatorID).
1356+
Return(nil, nil)
13451357
},
13461358
wantErr: true,
13471359
wantErrCode: errno.EvaluatorNotExistCode,
13481360
},
1361+
{
1362+
name: "builtin_evaluator_success",
1363+
req: &evaluatorservice.ListEvaluatorVersionsRequest{
1364+
WorkspaceID: workspaceID,
1365+
EvaluatorID: &evaluatorID,
1366+
},
1367+
mockSetup: func() {
1368+
mockAuth.EXPECT().Authorization(gomock.Any(), gomock.Any()).Return(nil)
1369+
// 当前 workspace 下查不到
1370+
mockEvaluatorService.EXPECT().GetEvaluator(gomock.Any(), workspaceID, evaluatorID, false).
1371+
Return(nil, nil)
1372+
// 命中预置评估器
1373+
mockEvaluatorService.EXPECT().GetBuiltinEvaluator(gomock.Any(), evaluatorID).
1374+
Return(builtinEvaluator, nil)
1375+
// authBuiltinManagement 通过
1376+
mockConfiger.EXPECT().GetBuiltinEvaluatorSpaceConf(gomock.Any()).
1377+
Return([]string{strconv.FormatInt(builtinSpaceID, 10)})
1378+
mockEvaluatorService.EXPECT().ListEvaluatorVersion(gomock.Any(), gomock.Any()).
1379+
Return(evaluators, int64(1), nil)
1380+
mockUserInfoService.EXPECT().PackUserInfo(gomock.Any(), gomock.Any()).Return()
1381+
},
1382+
wantErr: false,
1383+
},
1384+
{
1385+
name: "builtin_evaluator_auth_failed",
1386+
req: &evaluatorservice.ListEvaluatorVersionsRequest{
1387+
WorkspaceID: workspaceID,
1388+
EvaluatorID: &evaluatorID,
1389+
},
1390+
mockSetup: func() {
1391+
mockAuth.EXPECT().Authorization(gomock.Any(), gomock.Any()).Return(nil)
1392+
mockEvaluatorService.EXPECT().GetEvaluator(gomock.Any(), workspaceID, evaluatorID, false).
1393+
Return(nil, nil)
1394+
mockEvaluatorService.EXPECT().GetBuiltinEvaluator(gomock.Any(), evaluatorID).
1395+
Return(builtinEvaluator, nil)
1396+
// builtin 空间不在允许列表中,authBuiltinManagement 会失败
1397+
mockConfiger.EXPECT().GetBuiltinEvaluatorSpaceConf(gomock.Any()).
1398+
Return([]string{})
1399+
},
1400+
wantErr: true,
1401+
},
1402+
{
1403+
name: "get_builtin_evaluator_failed",
1404+
req: &evaluatorservice.ListEvaluatorVersionsRequest{
1405+
WorkspaceID: workspaceID,
1406+
EvaluatorID: &evaluatorID,
1407+
},
1408+
mockSetup: func() {
1409+
mockAuth.EXPECT().Authorization(gomock.Any(), gomock.Any()).Return(nil)
1410+
mockEvaluatorService.EXPECT().GetEvaluator(gomock.Any(), workspaceID, evaluatorID, false).
1411+
Return(nil, nil)
1412+
mockEvaluatorService.EXPECT().GetBuiltinEvaluator(gomock.Any(), evaluatorID).
1413+
Return(nil, errors.New("db error"))
1414+
},
1415+
wantErr: true,
1416+
},
13491417
{
13501418
name: "get_evaluator_failed",
13511419
req: &evaluatorservice.ListEvaluatorVersionsRequest{

0 commit comments

Comments
 (0)