Skip to content

Commit 3fd5962

Browse files
committed
create addTeamMatesOnlyFilter()
1 parent f0348be commit 3fd5962

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

models/organization/org.go

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"code.gitea.io/gitea/modules/util"
2323

2424
"xorm.io/builder"
25+
"xorm.io/xorm"
2526
)
2627

2728
// ________ .__ __ .__
@@ -205,12 +206,27 @@ func (opts FindOrgMembersOpts) PublicOnly() bool {
205206
return opts.Doer == nil || !opts.IsMember && !opts.Doer.IsAdmin
206207
}
207208

209+
func (opts FindOrgMembersOpts) addTeamMatesOnlyFilter(ctx context.Context, sess *xorm.Session) error {
210+
if opts.Doer != nil && opts.IsMember && opts.Doer.IsRestricted {
211+
teamMates := builder.Select("DISTINCT team_user.uid").
212+
From("team_user").
213+
Where(builder.In("team_user.team_id", userTeamIDbuilder(opts.OrgID, opts.Doer.ID))).
214+
And(builder.Eq{"team_user.org_id": opts.OrgID})
215+
216+
sess.In("org_user.uid", teamMates)
217+
}
218+
return nil
219+
}
220+
208221
// CountOrgMembers counts the organization's members
209222
func CountOrgMembers(ctx context.Context, opts *FindOrgMembersOpts) (int64, error) {
210223
sess := db.GetEngine(ctx).Where("org_id=?", opts.OrgID)
211224
if opts.PublicOnly() {
212225
sess.And("is_public = ?", true)
213226
}
227+
if err := opts.addTeamMatesOnlyFilter(ctx, sess); err != nil {
228+
return 0, err
229+
}
214230

215231
return sess.Count(new(OrgUser))
216232
}
@@ -535,6 +551,9 @@ func GetOrgUsersByOrgID(ctx context.Context, opts *FindOrgMembersOpts) ([]*OrgUs
535551
if opts.PublicOnly() {
536552
sess.And("is_public = ?", true)
537553
}
554+
if err := opts.addTeamMatesOnlyFilter(ctx, sess); err != nil {
555+
return nil, err
556+
}
538557

539558
if opts.ListOptions.PageSize > 0 {
540559
sess = db.SetSessionPagination(sess, opts)
@@ -658,12 +677,19 @@ func (org *Organization) getUserTeamIDs(ctx context.Context, userID int64) ([]in
658677
return teamIDs, db.GetEngine(ctx).
659678
Table("team").
660679
Cols("team.id").
661-
Where("`team_user`.org_id = ?", org.ID).
662-
Join("INNER", "team_user", "`team_user`.team_id = team.id").
663-
And("`team_user`.uid = ?", userID).
680+
Where(userTeamIDbuilder(org.ID, userID)).
664681
Find(&teamIDs)
665682
}
666683

684+
func userTeamIDbuilder(orgID, userID int64) *builder.Builder {
685+
return builder.Select("team.id").From("team").
686+
InnerJoin("team_user", "team_user.team_id = team.id").
687+
Where(builder.Eq{
688+
"team_user.org_id": orgID,
689+
"team_user.uid": userID,
690+
})
691+
}
692+
667693
// TeamsWithAccessToRepo returns all teams that have given access level to the repository.
668694
func (org *Organization) TeamsWithAccessToRepo(ctx context.Context, repoID int64, mode perm.AccessMode) ([]*Team, error) {
669695
return GetTeamsWithAccessToRepo(ctx, org.ID, repoID, mode)

0 commit comments

Comments
 (0)