diff --git a/pkg/apiserver/domain/service/project.go b/pkg/apiserver/domain/service/project.go index fbd4a29d0..8f23c6238 100644 --- a/pkg/apiserver/domain/service/project.go +++ b/pkg/apiserver/domain/service/project.go @@ -383,9 +383,28 @@ func (p *projectServiceImpl) ListProjectUser(ctx context.Context, projectName st if err != nil { return nil, err } + var usernames []string + for _, entity := range entities { + usernames = append(usernames, entity.(*model.ProjectUser).Username) + } + var userMap = make(map[string]*model.User, len(usernames)) + if len(usernames) > 0 { + users, _ := p.Store.List(ctx, &model.User{}, &datastore.ListOptions{ + FilterOptions: datastore.FilterOptions{ + In: []datastore.InQueryOption{ + {Key: "name", Values: usernames}, + }, + }, + }) + for i := range users { + user := users[i].(*model.User) + userMap[user.Name] = user + } + } var res apisv1.ListProjectUsersResponse for _, entity := range entities { - res.Users = append(res.Users, ConvertProjectUserModel2Base(entity.(*model.ProjectUser))) + projectUser := entity.(*model.ProjectUser) + res.Users = append(res.Users, ConvertProjectUserModel2Base(projectUser, userMap[projectUser.Username])) } count, err := p.Store.Count(ctx, &projectUser, nil) if err != nil { @@ -400,7 +419,7 @@ func (p *projectServiceImpl) AddProjectUser(ctx context.Context, projectName str if err != nil { return nil, err } - _, err = p.UserService.GetUser(ctx, req.UserName) + user, err := p.UserService.GetUser(ctx, req.UserName) if err != nil { return nil, err } @@ -428,7 +447,7 @@ func (p *projectServiceImpl) AddProjectUser(ctx context.Context, projectName str } return nil, err } - return ConvertProjectUserModel2Base(&projectUser), nil + return ConvertProjectUserModel2Base(&projectUser, user), nil } func (p *projectServiceImpl) DeleteProjectUser(ctx context.Context, projectName string, userName string) error { @@ -454,6 +473,10 @@ func (p *projectServiceImpl) UpdateProjectUser(ctx context.Context, projectName if err != nil { return nil, err } + user, err := p.UserService.GetUser(ctx, userName) + if err != nil { + return nil, err + } // check user roles for _, role := range req.UserRoles { var projectUser = model.Role{ @@ -481,7 +504,7 @@ func (p *projectServiceImpl) UpdateProjectUser(ctx context.Context, projectName if err := p.Store.Put(ctx, &projectUser); err != nil { return nil, err } - return ConvertProjectUserModel2Base(&projectUser), nil + return ConvertProjectUserModel2Base(&projectUser, user), nil } func (p *projectServiceImpl) GetConfigs(ctx context.Context, projectName, configType string) ([]*apisv1.Config, error) { @@ -592,13 +615,16 @@ func ConvertProjectModel2Base(project *model.Project, owner *model.User) *apisv1 } // ConvertProjectUserModel2Base convert project user model to base struct -func ConvertProjectUserModel2Base(user *model.ProjectUser) *apisv1.ProjectUserBase { +func ConvertProjectUserModel2Base(user *model.ProjectUser, userModel *model.User) *apisv1.ProjectUserBase { base := &apisv1.ProjectUserBase{ UserName: user.Username, UserRoles: user.UserRoles, CreateTime: user.CreateTime, UpdateTime: user.UpdateTime, } + if userModel != nil { + base.UserAlias = userModel.Alias + } return base } diff --git a/pkg/apiserver/domain/service/project_test.go b/pkg/apiserver/domain/service/project_test.go index e453fcf48..60ba73484 100644 --- a/pkg/apiserver/domain/service/project_test.go +++ b/pkg/apiserver/domain/service/project_test.go @@ -227,6 +227,11 @@ var _ = Describe("Test project service functions", func() { UserRoles: []string{"project-admin"}, }) Expect(err).Should(BeNil()) + + users, err := projectService.ListProjectUser(context.TODO(), "test-project", 0, 0) + Expect(err).Should(BeNil()) + Expect(len(users.Users)).Should(Equal(1)) + Expect(users.Users[0].UserAlias).Should(Equal("Administrator")) }) It("Test Update project user function", func() { diff --git a/pkg/apiserver/interfaces/api/dto/v1/types.go b/pkg/apiserver/interfaces/api/dto/v1/types.go index 0321a5079..915ab1a70 100644 --- a/pkg/apiserver/interfaces/api/dto/v1/types.go +++ b/pkg/apiserver/interfaces/api/dto/v1/types.go @@ -1275,6 +1275,7 @@ type DetailUserResponse struct { // ProjectUserBase project user base type ProjectUserBase struct { UserName string `json:"name"` + UserAlias string `json:"alias"` UserRoles []string `json:"userRoles"` CreateTime time.Time `json:"createTime"` UpdateTime time.Time `json:"updateTime"`