@@ -206,24 +206,26 @@ func (opts FindOrgMembersOpts) PublicOnly() bool {
206206 return opts .Doer == nil || ! (opts .IsDoerMember || opts .Doer .IsAdmin )
207207}
208208
209+ // applyTeamMatesOnlyFilter make sure restricted users only see public team members and there own team mates
209210func (opts FindOrgMembersOpts ) applyTeamMatesOnlyFilter (sess * xorm.Session ) {
210211 if opts .Doer != nil && opts .IsDoerMember && opts .Doer .IsRestricted {
211212 teamMates := builder .Select ("DISTINCT team_user.uid" ).
212213 From ("team_user" ).
213214 Where (builder .In ("team_user.team_id" , getUserTeamIDsQueryBuilder (opts .OrgID , opts .Doer .ID ))).
214215 And (builder.Eq {"team_user.org_id" : opts .OrgID })
215216
216- sess .In ("org_user.uid" , teamMates )
217+ sess .And ( "is_public = ?" , true ). Or ( sess . In ("org_user.uid" , teamMates ) )
217218 }
218219}
219220
220221// CountOrgMembers counts the organization's members
221222func CountOrgMembers (ctx context.Context , opts * FindOrgMembersOpts ) (int64 , error ) {
222223 sess := db .GetEngine (ctx ).Where ("org_id=?" , opts .OrgID )
223224 if opts .PublicOnly () {
224- sess .And ("is_public = ?" , true )
225+ sess = sess .And ("is_public = ?" , true )
226+ } else {
227+ opts .applyTeamMatesOnlyFilter (sess )
225228 }
226- opts .applyTeamMatesOnlyFilter (sess )
227229
228230 return sess .Count (new (OrgUser ))
229231}
@@ -546,9 +548,10 @@ func GetOrgsCanCreateRepoByUserID(ctx context.Context, userID int64) ([]*Organiz
546548func GetOrgUsersByOrgID (ctx context.Context , opts * FindOrgMembersOpts ) ([]* OrgUser , error ) {
547549 sess := db .GetEngine (ctx ).Where ("org_id=?" , opts .OrgID )
548550 if opts .PublicOnly () {
549- sess .And ("is_public = ?" , true )
551+ sess = sess .And ("is_public = ?" , true )
552+ } else {
553+ opts .applyTeamMatesOnlyFilter (sess )
550554 }
551- opts .applyTeamMatesOnlyFilter (sess )
552555
553556 if opts .ListOptions .PageSize > 0 {
554557 sess = db .SetSessionPagination (sess , opts )
0 commit comments