diff --git a/pkg/microservice/user/core/handler/user/user.go b/pkg/microservice/user/core/handler/user/user.go index f4652ac9cf..f02cb01c96 100644 --- a/pkg/microservice/user/core/handler/user/user.go +++ b/pkg/microservice/user/core/handler/user/user.go @@ -288,6 +288,7 @@ func OpenAPIListUsersBrief(c *gin.Context) { Account: args.Account, Name: args.Name, Roles: args.Roles, + Project: args.Project, IdentityType: args.IdentityType, } diff --git a/pkg/microservice/user/core/repository/orm/user.go b/pkg/microservice/user/core/repository/orm/user.go index 633607f1d6..5ef3190e2c 100644 --- a/pkg/microservice/user/core/repository/orm/user.go +++ b/pkg/microservice/user/core/repository/orm/user.go @@ -117,14 +117,14 @@ func ListUsersByLoginTime(page int, perPage int, name string, order setting.List return users, nil } -// ListUsersByNameAndRole gets a list of users based on paging constraints, the name of the user, and the roles of the user -func ListUsersByNameAndRole(page int, perPage int, name string, roles []string, db *gorm.DB) ([]models.User, error) { +// ListUsersByNameAndRole gets a list of users based on paging constraints, the name of the user, the roles, and namespace +func ListUsersByNameAndRole(page int, perPage int, name string, roles []string, namespace string, db *gorm.DB) ([]models.User, error) { var ( users []models.User err error ) - err = db.Where("user.name LIKE ? AND role.name IN ?", "%"+name+"%", roles). + err = db.Where("user.name LIKE ? AND role.name IN ? AND role.namespace = ?", "%"+name+"%", roles, namespace). Joins("INNER JOIN role_binding on role_binding.uid = user.uid"). Joins("INNER JOIN role on role_binding.role_id = role.id").Order("account ASC").Offset((page - 1) * perPage). Group("user.uid"). @@ -223,15 +223,15 @@ func GetUsersCount(name string) (int64, error) { return count, nil } -// GetUsersCount gets user count -func GetUsersCountByRoles(name string, roles []string) (int64, error) { +// GetUsersCountByRoles gets user count filtered by roles and namespace +func GetUsersCountByRoles(name string, roles []string, namespace string) (int64, error) { var ( users []models.User err error count int64 ) - err = repository.DB.Where("user.name LIKE ? AND role.name IN ?", "%"+name+"%", roles). + err = repository.DB.Where("user.name LIKE ? AND role.name IN ? AND role.namespace = ?", "%"+name+"%", roles, namespace). Joins("INNER JOIN role_binding on role_binding.uid = user.uid"). Joins("INNER JOIN role on role_binding.role_id = role.id"). Group("user.uid"). diff --git a/pkg/microservice/user/core/service/permission/user.go b/pkg/microservice/user/core/service/permission/user.go index 7c38e179af..e24038a3f3 100644 --- a/pkg/microservice/user/core/service/permission/user.go +++ b/pkg/microservice/user/core/service/permission/user.go @@ -71,6 +71,7 @@ type OpenAPIQueryArgs struct { IdentityType string `json:"identity_type,omitempty" form:"identity_type"` Name string `json:"name,omitempty" form:"name"` Roles []string `json:"roles,omitempty" form:"roles"` + Project string `json:"projectName,omitempty" form:"projectName"` } type QueryArgs struct { @@ -81,6 +82,7 @@ type QueryArgs struct { PerPage int `json:"per_page,omitempty" form:"perPage"` Page int `json:"page,omitempty" form:"page"` Roles []string `json:"roles,omitempty" form:"roles"` + Project string `json:"projectName,omitempty" form:"projectName"` OrderBy setting.ListUserOrderBy `json:"order_by,omitempty" form:"order_by"` Order setting.ListUserOrder `json:"order,omitempty" form:"order"` } @@ -333,6 +335,11 @@ func SearchUserByAccount(args *QueryArgs, logger *zap.SugaredLogger) (*types.Use } func SearchUsers(args *QueryArgs, logger *zap.SugaredLogger) (*types.UsersResp, error) { + namespace := args.Project + if namespace == "" { + namespace = "*" + } + var count int64 var err error if len(args.Roles) == 0 { @@ -342,7 +349,7 @@ func SearchUsers(args *QueryArgs, logger *zap.SugaredLogger) (*types.UsersResp, return nil, err } } else { - count, err = orm.GetUsersCountByRoles(args.Name, args.Roles) + count, err = orm.GetUsersCountByRoles(args.Name, args.Roles, namespace) if err != nil { logger.Errorf("SeachUsers GetUsersCount By name:%s error, error msg:%s", args.Name, err.Error()) return nil, err @@ -369,7 +376,7 @@ func SearchUsers(args *QueryArgs, logger *zap.SugaredLogger) (*types.UsersResp, return nil, err } } else { - us, err = orm.ListUsersByNameAndRole(args.Page, args.PerPage, args.Name, args.Roles, repository.DB) + us, err = orm.ListUsersByNameAndRole(args.Page, args.PerPage, args.Name, args.Roles, namespace, repository.DB) if err != nil { logger.Errorf("SeachUsers SeachUsers By name:%s error, error msg:%s", args.Name, err.Error()) return nil, err