[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
Этот коммит содержится в:
Mario de Frutos Dieguez
2020-06-29 21:24:36 +02:00
коммит произвёл GitHub
родитель e2e352e223
Коммит bec2f366a7
3 изменённых файлов: 14 добавлений и 4 удалений

Просмотреть файл

@@ -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{},