mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Don't return duplicated users who can create org repo (#22560)
- Currently the function `GetUsersWhoCanCreateOrgRepo` uses a query that
is able to have duplicated users in the result, this is can happen under
the condition that a user is in team that either is the owner team or
has permission to create organization repositories.
- Add test code to simulate the above condition for user 3,
[`TestGetUsersWhoCanCreateOrgRepo`](a1fcb1cfb8/models/organization/org_test.go (L435))
is the test function that tests for this.
- The fix is quite trivial use a map keyed by user id in order to drop
duplicates.
---------
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
			
			
This commit is contained in:
		@@ -397,13 +397,14 @@ func (org *Organization) GetOrgUserMaxAuthorizeLevel(uid int64) (perm.AccessMode
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetUsersWhoCanCreateOrgRepo returns users which are able to create repo in organization
 | 
			
		||||
func GetUsersWhoCanCreateOrgRepo(ctx context.Context, orgID int64) ([]*user_model.User, error) {
 | 
			
		||||
	users := make([]*user_model.User, 0, 10)
 | 
			
		||||
func GetUsersWhoCanCreateOrgRepo(ctx context.Context, orgID int64) (map[int64]*user_model.User, error) {
 | 
			
		||||
	// Use a map, in order to de-duplicate users.
 | 
			
		||||
	users := make(map[int64]*user_model.User)
 | 
			
		||||
	return users, db.GetEngine(ctx).
 | 
			
		||||
		Join("INNER", "`team_user`", "`team_user`.uid=`user`.id").
 | 
			
		||||
		Join("INNER", "`team`", "`team`.id=`team_user`.team_id").
 | 
			
		||||
		Where(builder.Eq{"team.can_create_org_repo": true}.Or(builder.Eq{"team.authorize": perm.AccessModeOwner})).
 | 
			
		||||
		And("team_user.org_id = ?", orgID).Asc("`user`.name").Find(&users)
 | 
			
		||||
		And("team_user.org_id = ?", orgID).Find(&users)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SearchOrganizationsOptions options to filter organizations
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user