[MM-45715] Check for correct permission when requesting teams (#20715)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
072c859219
Коммит
f199be6aa5
@@ -71,7 +71,7 @@ func getGraphQLTeams(c *web.Context, teamIDs []string) ([]*model.Team, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !c.App.SessionHasPermissionToTeams(c.AppContext, *c.AppContext.Session(), teamsToCheck, model.PermissionViewMembers) {
|
if !c.App.SessionHasPermissionToTeams(c.AppContext, *c.AppContext.Session(), teamsToCheck, model.PermissionViewTeam) {
|
||||||
c.SetPermissionError(model.PermissionViewTeam)
|
c.SetPermissionError(model.PermissionViewTeam)
|
||||||
return nil, c.Err
|
return nil, c.Err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -289,3 +289,103 @@ func TestGraphQLTeamMembers(t *testing.T) {
|
|||||||
assert.Len(t, q.TeamMembers, 1)
|
assert.Len(t, q.TeamMembers, 1)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGraphQLTeamMembersAsGuest(t *testing.T) {
|
||||||
|
os.Setenv("MM_FEATUREFLAGS_GRAPHQL", "true")
|
||||||
|
defer os.Unsetenv("MM_FEATUREFLAGS_GRAPHQL")
|
||||||
|
th := Setup(t).InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
th.App.DemoteUserToGuest(th.Context, th.BasicUser)
|
||||||
|
th.BasicUser, _ = th.App.UpdateUserRoles(th.BasicUser.Id, model.SystemGuestRoleId, false)
|
||||||
|
|
||||||
|
var q struct {
|
||||||
|
TeamMembers []struct {
|
||||||
|
User struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
Username string `json:"username"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
FirstName string `json:"firstName"`
|
||||||
|
LastName string `json:"lastName"`
|
||||||
|
NickName string `json:"nickname"`
|
||||||
|
} `json:"user"`
|
||||||
|
Team struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
DisplayName string `json:"displayName"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
CreateAt float64 `json:"createAt"`
|
||||||
|
DeleteAt float64 `json:"deleteAt"`
|
||||||
|
SchemeId *string `json:"schemeId"`
|
||||||
|
PolicyId *string `json:"policyId"`
|
||||||
|
CloudLimitsArchived bool `json:"cloudLimitsArchived"`
|
||||||
|
} `json:"team"`
|
||||||
|
Roles []struct {
|
||||||
|
ID string `json:"id"`
|
||||||
|
Name string `json:"Name"`
|
||||||
|
Permissions []string `json:"permissions"`
|
||||||
|
SchemeManaged bool `json:"schemeManaged"`
|
||||||
|
BuiltIn bool `json:"builtIn"`
|
||||||
|
} `json:"roles"`
|
||||||
|
DeleteAt float64 `json:"deleteAt"`
|
||||||
|
SchemeGuest bool `json:"schemeGuest"`
|
||||||
|
SchemeUser bool `json:"schemeUser"`
|
||||||
|
SchemeAdmin bool `json:"schemeAdmin"`
|
||||||
|
} `json:"teamMembers"`
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("User", func(t *testing.T) {
|
||||||
|
input := graphQLInput{
|
||||||
|
OperationName: "teamMembers",
|
||||||
|
Query: `
|
||||||
|
query teamMembers($userId: String = "", $teamId: String = "") {
|
||||||
|
teamMembers(userId: $userId, teamId: $teamId) {
|
||||||
|
team {
|
||||||
|
id
|
||||||
|
displayName
|
||||||
|
}
|
||||||
|
user {
|
||||||
|
id
|
||||||
|
username
|
||||||
|
email
|
||||||
|
firstName
|
||||||
|
lastName
|
||||||
|
}
|
||||||
|
roles {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
}
|
||||||
|
schemeGuest
|
||||||
|
schemeUser
|
||||||
|
schemeAdmin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
Variables: map[string]any{
|
||||||
|
"userId": "me",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := th.MakeGraphQLRequest(&input)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, resp.Errors, 0)
|
||||||
|
require.NoError(t, json.Unmarshal(resp.Data, &q))
|
||||||
|
assert.Len(t, q.TeamMembers, 1)
|
||||||
|
|
||||||
|
tm := q.TeamMembers[0]
|
||||||
|
assert.Equal(t, th.BasicTeam.Id, tm.Team.ID)
|
||||||
|
assert.Equal(t, th.BasicTeam.DisplayName, tm.Team.DisplayName)
|
||||||
|
|
||||||
|
assert.Equal(t, th.BasicUser.Id, tm.User.ID)
|
||||||
|
assert.Equal(t, th.BasicUser.Username, tm.User.Username)
|
||||||
|
assert.Equal(t, th.BasicUser.Email, tm.User.Email)
|
||||||
|
assert.Equal(t, th.BasicUser.FirstName, tm.User.FirstName)
|
||||||
|
assert.Equal(t, th.BasicUser.LastName, tm.User.LastName)
|
||||||
|
|
||||||
|
require.Len(t, tm.Roles, 1)
|
||||||
|
assert.NotEmpty(t, tm.Roles[0].ID)
|
||||||
|
assert.Equal(t, "team_guest", tm.Roles[0].Name)
|
||||||
|
assert.True(t, tm.SchemeGuest)
|
||||||
|
assert.False(t, tm.SchemeUser)
|
||||||
|
assert.False(t, tm.SchemeAdmin)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user