diff --git a/pkg/api/dashboard_permission.go b/pkg/api/dashboard_permission.go index 3d5c8553ecc..df9dae8e705 100644 --- a/pkg/api/dashboard_permission.go +++ b/pkg/api/dashboard_permission.go @@ -32,7 +32,7 @@ func (hs *HTTPServer) GetDashboardPermissionList(c *models.ReqContext) response. filteredAcls := make([]*models.DashboardAclInfoDTO, 0, len(acl)) for _, perm := range acl { - if dtos.IsHiddenUser(perm.UserLogin, c.SignedInUser, hs.Cfg) { + if perm.UserId > 0 && dtos.IsHiddenUser(perm.UserLogin, c.SignedInUser, hs.Cfg) { continue } diff --git a/pkg/api/dtos/models.go b/pkg/api/dtos/models.go index 48131ccfab5..a884627b8e6 100644 --- a/pkg/api/dtos/models.go +++ b/pkg/api/dtos/models.go @@ -77,7 +77,7 @@ func GetGravatarUrlWithDefault(text string, defaultText string) string { } func IsHiddenUser(userLogin string, signedInUser *models.SignedInUser, cfg *setting.Cfg) bool { - if signedInUser.IsGrafanaAdmin || userLogin == signedInUser.Login { + if userLogin == "" || signedInUser.IsGrafanaAdmin || userLogin == signedInUser.Login { return false } diff --git a/pkg/api/dtos/models_test.go b/pkg/api/dtos/models_test.go new file mode 100644 index 00000000000..070c9c65da1 --- /dev/null +++ b/pkg/api/dtos/models_test.go @@ -0,0 +1,86 @@ +package dtos + +import ( + "testing" + + "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/setting" + "gotest.tools/assert" +) + +func TestIsHiddenUser(t *testing.T) { + emptyHiddenUsers := map[string]struct{}{} + hiddenUser := map[string]struct{}{ + "user": {}, + } + + testcases := []struct { + desc string + userLogin string + signedInUser *models.SignedInUser + hiddenUsers map[string]struct{} + expected bool + }{ + { + desc: "non-server admin user should see non-hidden user", + userLogin: "user", + signedInUser: &models.SignedInUser{ + IsGrafanaAdmin: false, + Login: "admin", + }, + hiddenUsers: emptyHiddenUsers, + expected: false, + }, + { + desc: "non-server admin user should not see hidden user", + userLogin: "user", + signedInUser: &models.SignedInUser{ + IsGrafanaAdmin: false, + Login: "admin", + }, + hiddenUsers: hiddenUser, + expected: true, + }, + { + desc: "non-server admin user should see himself, even if he's hidden", + userLogin: "admin", + signedInUser: &models.SignedInUser{ + IsGrafanaAdmin: false, + Login: "admin", + }, + hiddenUsers: map[string]struct{}{ + "admin": {}, + }, + expected: false, + }, + { + desc: "server admin user should see hidden user", + userLogin: "user", + signedInUser: &models.SignedInUser{ + IsGrafanaAdmin: true, + Login: "admin", + }, + hiddenUsers: hiddenUser, + expected: false, + }, + { + desc: "server admin user should see non-hidden user", + userLogin: "user", + signedInUser: &models.SignedInUser{ + IsGrafanaAdmin: true, + Login: "admin", + }, + hiddenUsers: emptyHiddenUsers, + expected: false, + }, + } + + for _, c := range testcases { + t.Run(c.desc, func(t *testing.T) { + isHidden := IsHiddenUser(c.userLogin, c.signedInUser, &setting.Cfg{ + HiddenUsers: c.hiddenUsers, + }) + assert.Equal(t, c.expected, isHidden) + }) + } +} diff --git a/pkg/api/folder_permission.go b/pkg/api/folder_permission.go index d7f64643ddb..21c380e30ae 100644 --- a/pkg/api/folder_permission.go +++ b/pkg/api/folder_permission.go @@ -34,7 +34,7 @@ func (hs *HTTPServer) GetFolderPermissionList(c *models.ReqContext) response.Res filteredAcls := make([]*models.DashboardAclInfoDTO, 0, len(acl)) for _, perm := range acl { - if dtos.IsHiddenUser(perm.UserLogin, c.SignedInUser, hs.Cfg) { + if perm.UserId > 0 && dtos.IsHiddenUser(perm.UserLogin, c.SignedInUser, hs.Cfg) { continue } diff --git a/pkg/setting/setting.go b/pkg/setting/setting.go index 724b019b0e6..bd8c2c211cf 100644 --- a/pkg/setting/setting.go +++ b/pkg/setting/setting.go @@ -1196,7 +1196,9 @@ func readUserSettings(iniFile *ini.File, cfg *Cfg) error { hiddenUsers := users.Key("hidden_users").MustString("") for _, user := range strings.Split(hiddenUsers, ",") { user = strings.TrimSpace(user) - cfg.HiddenUsers[user] = struct{}{} + if user != "" { + cfg.HiddenUsers[user] = struct{}{} + } } return nil