Simplify CheckUnitUser logic (#12854)
if check one user's unit in different repos, it's not necessary to get user data every time. Signed-off-by: a1012112796 <1012112796@qq.com> Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		
							parent
							
								
									07995e2301
								
							
						
					
					
						commit
						ec5677b7a2
					
				
					 4 changed files with 17 additions and 14 deletions
				
			
		|  | @ -199,10 +199,18 @@ func createOrUpdateIssueNotifications(e Engine, issueID, commentID, notification | |||
| 	// notify
 | ||||
| 	for userID := range toNotify { | ||||
| 		issue.Repo.Units = nil | ||||
| 		if issue.IsPull && !issue.Repo.checkUnitUser(e, userID, false, UnitTypePullRequests) { | ||||
| 		user, err := getUserByID(e, userID) | ||||
| 		if err != nil { | ||||
| 			if IsErrUserNotExist(err) { | ||||
| 				continue | ||||
| 			} | ||||
| 
 | ||||
| 			return err | ||||
| 		} | ||||
| 		if issue.IsPull && !issue.Repo.checkUnitUser(e, user, UnitTypePullRequests) { | ||||
| 			continue | ||||
| 		} | ||||
| 		if !issue.IsPull && !issue.Repo.checkUnitUser(e, userID, false, UnitTypeIssues) { | ||||
| 		if !issue.IsPull && !issue.Repo.checkUnitUser(e, user, UnitTypeIssues) { | ||||
| 			continue | ||||
| 		} | ||||
| 
 | ||||
|  |  | |||
|  | @ -425,20 +425,17 @@ func (repo *Repository) getUnits(e Engine) (err error) { | |||
| } | ||||
| 
 | ||||
| // CheckUnitUser check whether user could visit the unit of this repository
 | ||||
| func (repo *Repository) CheckUnitUser(userID int64, isAdmin bool, unitType UnitType) bool { | ||||
| 	return repo.checkUnitUser(x, userID, isAdmin, unitType) | ||||
| func (repo *Repository) CheckUnitUser(user *User, unitType UnitType) bool { | ||||
| 	return repo.checkUnitUser(x, user, unitType) | ||||
| } | ||||
| 
 | ||||
| func (repo *Repository) checkUnitUser(e Engine, userID int64, isAdmin bool, unitType UnitType) bool { | ||||
| 	if isAdmin { | ||||
| func (repo *Repository) checkUnitUser(e Engine, user *User, unitType UnitType) bool { | ||||
| 	if user.IsAdmin { | ||||
| 		return true | ||||
| 	} | ||||
| 	user, err := getUserByID(e, userID) | ||||
| 	if err != nil { | ||||
| 		return false | ||||
| 	} | ||||
| 	perm, err := getUserRepoPermission(e, repo, user) | ||||
| 	if err != nil { | ||||
| 		log.Error("getUserRepoPermission(): %v", err) | ||||
| 		return false | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -303,10 +303,8 @@ func ExploreCode(ctx *context.Context) { | |||
| 		repoIDs []int64 | ||||
| 		err     error | ||||
| 		isAdmin bool | ||||
| 		userID  int64 | ||||
| 	) | ||||
| 	if ctx.User != nil { | ||||
| 		userID = ctx.User.ID | ||||
| 		isAdmin = ctx.User.IsAdmin | ||||
| 	} | ||||
| 
 | ||||
|  | @ -336,7 +334,7 @@ func ExploreCode(ctx *context.Context) { | |||
| 		var rightRepoMap = make(map[int64]*models.Repository, len(repoMaps)) | ||||
| 		repoIDs = make([]int64, 0, len(repoMaps)) | ||||
| 		for id, repo := range repoMaps { | ||||
| 			if repo.CheckUnitUser(userID, isAdmin, models.UnitTypeCode) { | ||||
| 			if repo.CheckUnitUser(ctx.User, models.UnitTypeCode) { | ||||
| 				rightRepoMap[id] = repo | ||||
| 				repoIDs = append(repoIDs, id) | ||||
| 			} | ||||
|  |  | |||
|  | @ -140,7 +140,7 @@ func Create(ctx *context.Context) { | |||
| 	templateID := ctx.QueryInt64("template_id") | ||||
| 	if templateID > 0 { | ||||
| 		templateRepo, err := models.GetRepositoryByID(templateID) | ||||
| 		if err == nil && templateRepo.CheckUnitUser(ctxUser.ID, ctxUser.IsAdmin, models.UnitTypeCode) { | ||||
| 		if err == nil && templateRepo.CheckUnitUser(ctxUser, models.UnitTypeCode) { | ||||
| 			ctx.Data["repo_template"] = templateID | ||||
| 			ctx.Data["repo_template_name"] = templateRepo.Name | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue