PLT-4710 User search now obeys privacy settings (#4673)

* Consider privacy settings in user search

* Add sysadmin as exception to privacy settings for user search
Этот коммит содержится в:
Joram Wilander
2016-12-02 12:24:22 -05:00
коммит произвёл Christopher Speller
родитель c952985ffd
Коммит ea26c72dad
3 изменённых файлов: 186 добавлений и 10 удалений

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

@@ -2648,6 +2648,21 @@ func searchUsers(c *Context, w http.ResponseWriter, r *http.Request) {
searchOptions := map[string]bool{}
searchOptions[store.USER_SEARCH_OPTION_ALLOW_INACTIVE] = props.AllowInactive
if !HasPermissionToContext(c, model.PERMISSION_MANAGE_SYSTEM) {
hideFullName := !utils.Cfg.PrivacySettings.ShowFullName
hideEmail := !utils.Cfg.PrivacySettings.ShowEmailAddress
if hideFullName && hideEmail {
searchOptions[store.USER_SEARCH_OPTION_NAMES_ONLY_NO_FULL_NAME] = true
} else if hideFullName {
searchOptions[store.USER_SEARCH_OPTION_ALL_NO_FULL_NAME] = true
} else if hideEmail {
searchOptions[store.USER_SEARCH_OPTION_NAMES_ONLY] = true
}
c.Err = nil
}
var uchan store.StoreChannel
if props.InChannelId != "" {
uchan = Srv.Store.User().SearchInChannel(props.InChannelId, props.Term, searchOptions)
@@ -2711,7 +2726,14 @@ func autocompleteUsersInChannel(c *Context, w http.ResponseWriter, r *http.Reque
}
searchOptions := map[string]bool{}
searchOptions[store.USER_SEARCH_OPTION_NAMES_ONLY] = true
hideFullName := !utils.Cfg.PrivacySettings.ShowFullName
if hideFullName && !HasPermissionToContext(c, model.PERMISSION_MANAGE_SYSTEM) {
searchOptions[store.USER_SEARCH_OPTION_NAMES_ONLY_NO_FULL_NAME] = true
c.Err = nil
} else {
searchOptions[store.USER_SEARCH_OPTION_NAMES_ONLY] = true
}
uchan := Srv.Store.User().SearchInChannel(channelId, term, searchOptions)
nuchan := Srv.Store.User().SearchNotInChannel(teamId, channelId, term, searchOptions)
@@ -2760,7 +2782,14 @@ func autocompleteUsersInTeam(c *Context, w http.ResponseWriter, r *http.Request)
}
searchOptions := map[string]bool{}
searchOptions[store.USER_SEARCH_OPTION_NAMES_ONLY] = true
hideFullName := !utils.Cfg.PrivacySettings.ShowFullName
if hideFullName && !HasPermissionToContext(c, model.PERMISSION_MANAGE_SYSTEM) {
searchOptions[store.USER_SEARCH_OPTION_NAMES_ONLY_NO_FULL_NAME] = true
c.Err = nil
} else {
searchOptions[store.USER_SEARCH_OPTION_NAMES_ONLY] = true
}
uchan := Srv.Store.User().Search(teamId, term, searchOptions)

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

@@ -2240,6 +2240,112 @@ func TestSearchUsers(t *testing.T) {
}
}
emailPrivacy := utils.Cfg.PrivacySettings.ShowEmailAddress
namePrivacy := utils.Cfg.PrivacySettings.ShowFullName
defer func() {
utils.Cfg.PrivacySettings.ShowEmailAddress = emailPrivacy
utils.Cfg.PrivacySettings.ShowFullName = namePrivacy
}()
utils.Cfg.PrivacySettings.ShowEmailAddress = false
utils.Cfg.PrivacySettings.ShowFullName = false
privacyEmailPrefix := strings.ToLower(model.NewId())
privacyUser := &model.User{Email: privacyEmailPrefix + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: model.NewId(), LastName: "Jimmers"}
privacyUser = Client.Must(Client.CreateUser(privacyUser, "")).Data.(*model.User)
LinkUserToTeam(privacyUser, th.BasicTeam)
if result, err := Client.SearchUsers(model.UserSearch{Term: privacyUser.FirstName}); err != nil {
t.Fatal(err)
} else {
users := result.Data.([]*model.User)
found := false
for _, user := range users {
if user.Id == privacyUser.Id {
found = true
}
}
if found {
t.Fatal("should not have found profile")
}
}
utils.Cfg.PrivacySettings.ShowEmailAddress = true
if result, err := Client.SearchUsers(model.UserSearch{Term: privacyUser.FirstName}); err != nil {
t.Fatal(err)
} else {
users := result.Data.([]*model.User)
found := false
for _, user := range users {
if user.Id == privacyUser.Id {
found = true
}
}
if found {
t.Fatal("should not have found profile")
}
}
utils.Cfg.PrivacySettings.ShowEmailAddress = false
utils.Cfg.PrivacySettings.ShowFullName = true
if result, err := Client.SearchUsers(model.UserSearch{Term: privacyUser.FirstName}); err != nil {
t.Fatal(err)
} else {
users := result.Data.([]*model.User)
found := false
for _, user := range users {
if user.Id == privacyUser.Id {
found = true
}
}
if !found {
t.Fatal("should have found profile")
}
}
if result, err := Client.SearchUsers(model.UserSearch{Term: privacyEmailPrefix}); err != nil {
t.Fatal(err)
} else {
users := result.Data.([]*model.User)
found := false
for _, user := range users {
if user.Id == privacyUser.Id {
found = true
}
}
if found {
t.Fatal("should not have found profile")
}
}
utils.Cfg.PrivacySettings.ShowEmailAddress = true
if result, err := Client.SearchUsers(model.UserSearch{Term: privacyEmailPrefix}); err != nil {
t.Fatal(err)
} else {
users := result.Data.([]*model.User)
found := false
for _, user := range users {
if user.Id == privacyUser.Id {
found = true
}
}
if !found {
t.Fatal("should have found profile")
}
}
th.LoginBasic2()
if result, err := Client.SearchUsers(model.UserSearch{Term: th.BasicUser.Username}); err != nil {
@@ -2364,6 +2470,37 @@ func TestAutocompleteUsers(t *testing.T) {
}
}
namePrivacy := utils.Cfg.PrivacySettings.ShowFullName
defer func() {
utils.Cfg.PrivacySettings.ShowFullName = namePrivacy
}()
utils.Cfg.PrivacySettings.ShowFullName = false
privacyUser := &model.User{Email: strings.ToLower(model.NewId()) + "success+test@simulator.amazonses.com", Nickname: "Corey Hulen", Password: "passwd1", FirstName: model.NewId(), LastName: "Jimmers"}
privacyUser = Client.Must(Client.CreateUser(privacyUser, "")).Data.(*model.User)
LinkUserToTeam(privacyUser, th.BasicTeam)
if result, err := Client.AutocompleteUsersInChannel(privacyUser.FirstName, th.BasicChannel.Id); err != nil {
t.Fatal(err)
} else {
autocomplete := result.Data.(*model.UserAutocompleteInChannel)
if len(autocomplete.InChannel) != 0 {
t.Fatal("should have returned no users")
}
if len(autocomplete.OutOfChannel) != 0 {
t.Fatal("should have returned no users")
}
}
if result, err := Client.AutocompleteUsersInTeam(privacyUser.FirstName); err != nil {
t.Fatal(err)
} else {
autocomplete := result.Data.(*model.UserAutocompleteInTeam)
if len(autocomplete.InTeam) != 0 {
t.Fatal("should have returned no users")
}
}
if _, err := Client.AutocompleteUsersInChannel("", "junk"); err == nil {
t.Fatal("should have errored - bad channel id")
}