[MM-47378] Respond with bad requests for wrong query parameters 'roles' in getUsers (#21569)
* Respond with bad requests for wrong query parameters in roles * Revert "Respond with bad requests for wrong query parameters in roles" This reverts commit d8374d94e0b1f61ad445127010f9780475c48d1a. * Add GetUser client function to query with channel_id and roles * Return bad parameters error on invalid roles * Make client function generic, lint fixes * i18n strings addition * Validate 'role', add stricter check for comma separated roles
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
fc31b1713e
Коммит
0193bfd7de
40
api4/user.go
40
api4/user.go
@@ -693,14 +693,44 @@ func getUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
c.SetInvalidURLParam("inactive")
|
||||
}
|
||||
|
||||
roleNamesAll := []string{}
|
||||
// MM-47378: validate 'role' related parameters
|
||||
if role != "" || rolesString != "" || channelRolesString != "" || teamRolesString != "" {
|
||||
// fetch all role names
|
||||
rolesAll, err := c.App.GetAllRoles()
|
||||
if err != nil {
|
||||
c.Err = model.NewAppError("Api4.getUsers", "api.user.get_users.validation.app_error", nil, "Error fetching roles during validation.", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
for _, role := range rolesAll {
|
||||
roleNamesAll = append(roleNamesAll, role.Name)
|
||||
}
|
||||
}
|
||||
roles := []string{}
|
||||
var rolesValid bool
|
||||
if role != "" {
|
||||
roles, rolesValid = model.CleanRoleNames([]string{role})
|
||||
if !rolesValid {
|
||||
c.SetInvalidParam("role")
|
||||
return
|
||||
}
|
||||
roleValid := utils.StringInSlice(role, roleNamesAll)
|
||||
if !roleValid {
|
||||
c.SetInvalidParam("role")
|
||||
return
|
||||
}
|
||||
}
|
||||
if rolesString != "" {
|
||||
roles, rolesValid = model.CleanRoleNames(strings.Split(rolesString, ","))
|
||||
if !rolesValid {
|
||||
c.SetInvalidParam("roles")
|
||||
return
|
||||
}
|
||||
validRoleNames := utils.StringArrayIntersection(roleNamesAll, roles)
|
||||
if len(validRoleNames) != len(roles) {
|
||||
c.SetInvalidParam("roles")
|
||||
return
|
||||
}
|
||||
}
|
||||
channelRoles := []string{}
|
||||
if channelRolesString != "" && inChannelId != "" {
|
||||
@@ -709,6 +739,11 @@ func getUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
c.SetInvalidParam("channelRoles")
|
||||
return
|
||||
}
|
||||
validRoleNames := utils.StringArrayIntersection(roleNamesAll, channelRoles)
|
||||
if len(validRoleNames) != len(channelRoles) {
|
||||
c.SetInvalidParam("channelRoles")
|
||||
return
|
||||
}
|
||||
}
|
||||
teamRoles := []string{}
|
||||
if teamRolesString != "" && inTeamId != "" {
|
||||
@@ -717,6 +752,11 @@ func getUsers(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
c.SetInvalidParam("teamRoles")
|
||||
return
|
||||
}
|
||||
validRoleNames := utils.StringArrayIntersection(roleNamesAll, teamRoles)
|
||||
if len(validRoleNames) != len(teamRoles) {
|
||||
c.SetInvalidParam("teamRoles")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
restrictions, appErr := c.App.GetViewUsersRestrictions(c.AppContext.Session().UserId)
|
||||
|
||||
Ссылка в новой задаче
Block a user