[MM-24334] Include role filtering in ES search (#14465)
* ES supports role filtering for users - Added roles field for ES user index - Include role filtering logic in ES
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
e2e352e223
Коммит
bec2f366a7
@@ -124,6 +124,7 @@ type UserForIndexing struct {
|
||||
Nickname string `json:"nickname"`
|
||||
FirstName string `json:"first_name"`
|
||||
LastName string `json:"last_name"`
|
||||
Roles string `json:"roles"`
|
||||
CreateAt int64 `json:"create_at"`
|
||||
DeleteAt int64 `json:"delete_at"`
|
||||
TeamsIds []string `json:"team_id"`
|
||||
|
||||
@@ -99,7 +99,7 @@ var searchUserStoreTests = []searchTest{
|
||||
{
|
||||
Name: "Should be able to search filtering by role",
|
||||
Fn: testShouldBeAbleToSearchFilteringByRole,
|
||||
Tags: []string{ENGINE_POSTGRES, ENGINE_MYSQL},
|
||||
Tags: []string{ENGINE_MYSQL, ENGINE_POSTGRES, ENGINE_ELASTICSEARCH},
|
||||
},
|
||||
{
|
||||
Name: "Should ignore leading @ when searching users",
|
||||
@@ -612,18 +612,26 @@ func testShouldBeAbleToSearchInactiveUsers(t *testing.T, th *SearchTestHelper) {
|
||||
func testShouldBeAbleToSearchFilteringByRole(t *testing.T, th *SearchTestHelper) {
|
||||
userAlternate, err := th.createUser("basicusernamealternate", "alternatenickname", "firstname", "altlastname")
|
||||
require.Nil(t, err)
|
||||
userAlternate.Roles = "system_admin"
|
||||
userAlternate.Roles = "system_admin system_user"
|
||||
_, apperr := th.Store.User().Update(userAlternate, true)
|
||||
require.Nil(t, apperr)
|
||||
defer th.deleteUser(userAlternate)
|
||||
userAlternate2, err := th.createUser("basicusernamealternate2", "alternatenickname2", "firstname2", "altlastname2")
|
||||
require.Nil(t, err)
|
||||
userAlternate2.Roles = "system_user"
|
||||
_, apperr = th.Store.User().Update(userAlternate2, true)
|
||||
require.Nil(t, apperr)
|
||||
defer th.deleteUser(userAlternate2)
|
||||
err = th.addUserToTeams(userAlternate, []string{th.Team.Id})
|
||||
require.Nil(t, err)
|
||||
err = th.addUserToTeams(userAlternate2, []string{th.Team.Id})
|
||||
require.Nil(t, err)
|
||||
_, err = th.addUserToChannels(userAlternate, []string{th.ChannelBasic.Id})
|
||||
require.Nil(t, err)
|
||||
t.Run("Should autocomplete users filtering by roles", func(t *testing.T) {
|
||||
options := createDefaultOptions(false, false, true)
|
||||
options.Role = "system_admin"
|
||||
users, apperr := th.Store.User().AutocompleteUsersInChannel(th.Team.Id, th.ChannelBasic.Id, "basicusername", options)
|
||||
users, apperr := th.Store.User().AutocompleteUsersInChannel(th.Team.Id, th.ChannelBasic.Id, "", options)
|
||||
require.Nil(t, apperr)
|
||||
th.assertUsersMatchInAnyOrder(t, []*model.User{userAlternate}, users.InChannel)
|
||||
th.assertUsersMatchInAnyOrder(t, []*model.User{}, users.OutOfChannel)
|
||||
@@ -631,7 +639,7 @@ func testShouldBeAbleToSearchFilteringByRole(t *testing.T, th *SearchTestHelper)
|
||||
t.Run("Should search users filtering by roles", func(t *testing.T) {
|
||||
options := createDefaultOptions(false, false, true)
|
||||
options.Role = "system_admin"
|
||||
users, apperr := th.Store.User().Search(th.Team.Id, "basicusername", options)
|
||||
users, apperr := th.Store.User().Search(th.Team.Id, "", options)
|
||||
require.Nil(t, apperr)
|
||||
th.assertUsersMatchInAnyOrder(t, []*model.User{userAlternate}, users)
|
||||
})
|
||||
|
||||
@@ -1527,6 +1527,7 @@ func (us SqlUserStore) GetUsersBatchForIndexing(startTime, endTime int64, limit
|
||||
Nickname: user.Nickname,
|
||||
FirstName: user.FirstName,
|
||||
LastName: user.LastName,
|
||||
Roles: user.Roles,
|
||||
CreateAt: user.CreateAt,
|
||||
DeleteAt: user.DeleteAt,
|
||||
TeamsIds: []string{},
|
||||
|
||||
Ссылка в новой задаче
Block a user