[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"`
|
Nickname string `json:"nickname"`
|
||||||
FirstName string `json:"first_name"`
|
FirstName string `json:"first_name"`
|
||||||
LastName string `json:"last_name"`
|
LastName string `json:"last_name"`
|
||||||
|
Roles string `json:"roles"`
|
||||||
CreateAt int64 `json:"create_at"`
|
CreateAt int64 `json:"create_at"`
|
||||||
DeleteAt int64 `json:"delete_at"`
|
DeleteAt int64 `json:"delete_at"`
|
||||||
TeamsIds []string `json:"team_id"`
|
TeamsIds []string `json:"team_id"`
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ var searchUserStoreTests = []searchTest{
|
|||||||
{
|
{
|
||||||
Name: "Should be able to search filtering by role",
|
Name: "Should be able to search filtering by role",
|
||||||
Fn: testShouldBeAbleToSearchFilteringByRole,
|
Fn: testShouldBeAbleToSearchFilteringByRole,
|
||||||
Tags: []string{ENGINE_POSTGRES, ENGINE_MYSQL},
|
Tags: []string{ENGINE_MYSQL, ENGINE_POSTGRES, ENGINE_ELASTICSEARCH},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "Should ignore leading @ when searching users",
|
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) {
|
func testShouldBeAbleToSearchFilteringByRole(t *testing.T, th *SearchTestHelper) {
|
||||||
userAlternate, err := th.createUser("basicusernamealternate", "alternatenickname", "firstname", "altlastname")
|
userAlternate, err := th.createUser("basicusernamealternate", "alternatenickname", "firstname", "altlastname")
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
userAlternate.Roles = "system_admin"
|
userAlternate.Roles = "system_admin system_user"
|
||||||
_, apperr := th.Store.User().Update(userAlternate, true)
|
_, apperr := th.Store.User().Update(userAlternate, true)
|
||||||
require.Nil(t, apperr)
|
require.Nil(t, apperr)
|
||||||
defer th.deleteUser(userAlternate)
|
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})
|
err = th.addUserToTeams(userAlternate, []string{th.Team.Id})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
|
err = th.addUserToTeams(userAlternate2, []string{th.Team.Id})
|
||||||
|
require.Nil(t, err)
|
||||||
_, err = th.addUserToChannels(userAlternate, []string{th.ChannelBasic.Id})
|
_, err = th.addUserToChannels(userAlternate, []string{th.ChannelBasic.Id})
|
||||||
require.Nil(t, err)
|
require.Nil(t, err)
|
||||||
t.Run("Should autocomplete users filtering by roles", func(t *testing.T) {
|
t.Run("Should autocomplete users filtering by roles", func(t *testing.T) {
|
||||||
options := createDefaultOptions(false, false, true)
|
options := createDefaultOptions(false, false, true)
|
||||||
options.Role = "system_admin"
|
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)
|
require.Nil(t, apperr)
|
||||||
th.assertUsersMatchInAnyOrder(t, []*model.User{userAlternate}, users.InChannel)
|
th.assertUsersMatchInAnyOrder(t, []*model.User{userAlternate}, users.InChannel)
|
||||||
th.assertUsersMatchInAnyOrder(t, []*model.User{}, users.OutOfChannel)
|
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) {
|
t.Run("Should search users filtering by roles", func(t *testing.T) {
|
||||||
options := createDefaultOptions(false, false, true)
|
options := createDefaultOptions(false, false, true)
|
||||||
options.Role = "system_admin"
|
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)
|
require.Nil(t, apperr)
|
||||||
th.assertUsersMatchInAnyOrder(t, []*model.User{userAlternate}, users)
|
th.assertUsersMatchInAnyOrder(t, []*model.User{userAlternate}, users)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1527,6 +1527,7 @@ func (us SqlUserStore) GetUsersBatchForIndexing(startTime, endTime int64, limit
|
|||||||
Nickname: user.Nickname,
|
Nickname: user.Nickname,
|
||||||
FirstName: user.FirstName,
|
FirstName: user.FirstName,
|
||||||
LastName: user.LastName,
|
LastName: user.LastName,
|
||||||
|
Roles: user.Roles,
|
||||||
CreateAt: user.CreateAt,
|
CreateAt: user.CreateAt,
|
||||||
DeleteAt: user.DeleteAt,
|
DeleteAt: user.DeleteAt,
|
||||||
TeamsIds: []string{},
|
TeamsIds: []string{},
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user