diff --git a/models/organization/org_list.go b/models/organization/org_list.go index 73de7db824b..9f9ea69c7c7 100644 --- a/models/organization/org_list.go +++ b/models/organization/org_list.go @@ -89,6 +89,9 @@ func DoerViewOtherVisibility(doer, other *user_model.User) structs.VisibleType { if doer.IsAdmin || doer.ID == other.ID { return structs.VisibleTypePrivate } + if doer.IsRestricted { + return structs.VisibleTypePublic + } return structs.VisibleTypeLimited } diff --git a/models/organization/org_list_test.go b/models/organization/org_list_test.go index a3a8b1e2b05..6c4524ecb5a 100644 --- a/models/organization/org_list_test.go +++ b/models/organization/org_list_test.go @@ -77,8 +77,14 @@ func testLoadOrgListTeams(t *testing.T) { } func testDoerViewOtherVisibility(t *testing.T) { + viewer := &user_model.User{ID: 1} + other := &user_model.User{ID: 2} + restrictedViewer := &user_model.User{ID: 3, IsRestricted: true} + assert.Equal(t, structs.VisibleTypePublic, organization.DoerViewOtherVisibility(nil, nil)) - assert.Equal(t, structs.VisibleTypeLimited, organization.DoerViewOtherVisibility(&user_model.User{ID: 1}, &user_model.User{ID: 2})) - assert.Equal(t, structs.VisibleTypePrivate, organization.DoerViewOtherVisibility(&user_model.User{ID: 1}, &user_model.User{ID: 1})) - assert.Equal(t, structs.VisibleTypePrivate, organization.DoerViewOtherVisibility(&user_model.User{ID: 1, IsAdmin: true}, &user_model.User{ID: 2})) + assert.Equal(t, structs.VisibleTypeLimited, organization.DoerViewOtherVisibility(viewer, other)) + assert.Equal(t, structs.VisibleTypePublic, organization.DoerViewOtherVisibility(restrictedViewer, other)) + assert.Equal(t, structs.VisibleTypePrivate, organization.DoerViewOtherVisibility(viewer, viewer)) + assert.Equal(t, structs.VisibleTypePrivate, organization.DoerViewOtherVisibility(restrictedViewer, restrictedViewer)) + assert.Equal(t, structs.VisibleTypePrivate, organization.DoerViewOtherVisibility(&user_model.User{ID: 4, IsAdmin: true, IsRestricted: true}, other)) } diff --git a/tests/integration/api_user_orgs_test.go b/tests/integration/api_user_orgs_test.go index 54291f42728..381ea43f52d 100644 --- a/tests/integration/api_user_orgs_test.go +++ b/tests/integration/api_user_orgs_test.go @@ -77,6 +77,9 @@ func TestUserOrgs(t *testing.T) { orgs = getUserOrgs(t, unrelatedUsername, privateMemberUsername) assert.Empty(t, orgs) + orgs = getUserOrgs(t, "user29", adminUsername) + assert.Empty(t, orgs) + // not authenticated call should not be allowed testUserOrgsUnauthenticated(t, privateMemberUsername) }