mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	Move organization related structs into sub package (#18518)
* Move organization related structs into sub package * Fix test * Fix lint * Move more functions into sub packages * Fix bug * Fix test * Update models/organization/team_repo.go Co-authored-by: KN4CK3R <admin@oldschoolhack.me> * Apply suggestions from code review Co-authored-by: KN4CK3R <admin@oldschoolhack.me> * Fix fmt * Follow suggestion from @Gusted * Fix test * Fix test * Fix bug * Use ctx but db.DefaultContext on routers * Fix bug * Fix bug * fix bug * Update models/organization/team_user.go * Fix bug Co-authored-by: KN4CK3R <admin@oldschoolhack.me> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		
							
								
								
									
										110
									
								
								models/user.go
									
									
									
									
									
								
							
							
						
						
									
										110
									
								
								models/user.go
									
									
									
									
									
								
							| @@ -14,22 +14,13 @@ import ( | ||||
|  | ||||
| 	asymkey_model "code.gitea.io/gitea/models/asymkey" | ||||
| 	"code.gitea.io/gitea/models/db" | ||||
| 	"code.gitea.io/gitea/models/organization" | ||||
| 	repo_model "code.gitea.io/gitea/models/repo" | ||||
| 	user_model "code.gitea.io/gitea/models/user" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 	"code.gitea.io/gitea/modules/structs" | ||||
| 	"code.gitea.io/gitea/modules/util" | ||||
|  | ||||
| 	"xorm.io/builder" | ||||
| ) | ||||
|  | ||||
| // GetOrganizationCount returns count of membership of organization of the user. | ||||
| func GetOrganizationCount(ctx context.Context, u *user_model.User) (int64, error) { | ||||
| 	return db.GetEngine(ctx). | ||||
| 		Where("uid=?", u.ID). | ||||
| 		Count(new(OrgUser)) | ||||
| } | ||||
|  | ||||
| // DeleteUser deletes models associated to an user. | ||||
| func DeleteUser(ctx context.Context, u *user_model.User) (err error) { | ||||
| 	e := db.GetEngine(ctx) | ||||
| @@ -86,7 +77,7 @@ func DeleteUser(ctx context.Context, u *user_model.User) (err error) { | ||||
| 		&user_model.EmailAddress{UID: u.ID}, | ||||
| 		&user_model.UserOpenID{UID: u.ID}, | ||||
| 		&Reaction{UserID: u.ID}, | ||||
| 		&TeamUser{UID: u.ID}, | ||||
| 		&organization.TeamUser{UID: u.ID}, | ||||
| 		&Collaboration{UserID: u.ID}, | ||||
| 		&Stopwatch{UserID: u.ID}, | ||||
| 		&user_model.Setting{UserID: u.ID}, | ||||
| @@ -204,100 +195,3 @@ func DeleteUser(ctx context.Context, u *user_model.User) (err error) { | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // GetStarredRepos returns the repos starred by a particular user | ||||
| func GetStarredRepos(userID int64, private bool, listOptions db.ListOptions) ([]*repo_model.Repository, error) { | ||||
| 	sess := db.GetEngine(db.DefaultContext).Where("star.uid=?", userID). | ||||
| 		Join("LEFT", "star", "`repository`.id=`star`.repo_id") | ||||
| 	if !private { | ||||
| 		sess = sess.And("is_private=?", false) | ||||
| 	} | ||||
|  | ||||
| 	if listOptions.Page != 0 { | ||||
| 		sess = db.SetSessionPagination(sess, &listOptions) | ||||
|  | ||||
| 		repos := make([]*repo_model.Repository, 0, listOptions.PageSize) | ||||
| 		return repos, sess.Find(&repos) | ||||
| 	} | ||||
|  | ||||
| 	repos := make([]*repo_model.Repository, 0, 10) | ||||
| 	return repos, sess.Find(&repos) | ||||
| } | ||||
|  | ||||
| // GetWatchedRepos returns the repos watched by a particular user | ||||
| func GetWatchedRepos(userID int64, private bool, listOptions db.ListOptions) ([]*repo_model.Repository, int64, error) { | ||||
| 	sess := db.GetEngine(db.DefaultContext).Where("watch.user_id=?", userID). | ||||
| 		And("`watch`.mode<>?", repo_model.WatchModeDont). | ||||
| 		Join("LEFT", "watch", "`repository`.id=`watch`.repo_id") | ||||
| 	if !private { | ||||
| 		sess = sess.And("is_private=?", false) | ||||
| 	} | ||||
|  | ||||
| 	if listOptions.Page != 0 { | ||||
| 		sess = db.SetSessionPagination(sess, &listOptions) | ||||
|  | ||||
| 		repos := make([]*repo_model.Repository, 0, listOptions.PageSize) | ||||
| 		total, err := sess.FindAndCount(&repos) | ||||
| 		return repos, total, err | ||||
| 	} | ||||
|  | ||||
| 	repos := make([]*repo_model.Repository, 0, 10) | ||||
| 	total, err := sess.FindAndCount(&repos) | ||||
| 	return repos, total, err | ||||
| } | ||||
|  | ||||
| // IsUserVisibleToViewer check if viewer is able to see user profile | ||||
| func IsUserVisibleToViewer(u, viewer *user_model.User) bool { | ||||
| 	return isUserVisibleToViewer(db.GetEngine(db.DefaultContext), u, viewer) | ||||
| } | ||||
|  | ||||
| func isUserVisibleToViewer(e db.Engine, u, viewer *user_model.User) bool { | ||||
| 	if viewer != nil && viewer.IsAdmin { | ||||
| 		return true | ||||
| 	} | ||||
|  | ||||
| 	switch u.Visibility { | ||||
| 	case structs.VisibleTypePublic: | ||||
| 		return true | ||||
| 	case structs.VisibleTypeLimited: | ||||
| 		if viewer == nil || viewer.IsRestricted { | ||||
| 			return false | ||||
| 		} | ||||
| 		return true | ||||
| 	case structs.VisibleTypePrivate: | ||||
| 		if viewer == nil || viewer.IsRestricted { | ||||
| 			return false | ||||
| 		} | ||||
|  | ||||
| 		// If they follow - they see each over | ||||
| 		follower := user_model.IsFollowing(u.ID, viewer.ID) | ||||
| 		if follower { | ||||
| 			return true | ||||
| 		} | ||||
|  | ||||
| 		// Now we need to check if they in some organization together | ||||
| 		count, err := e.Table("team_user"). | ||||
| 			Where( | ||||
| 				builder.And( | ||||
| 					builder.Eq{"uid": viewer.ID}, | ||||
| 					builder.Or( | ||||
| 						builder.Eq{"org_id": u.ID}, | ||||
| 						builder.In("org_id", | ||||
| 							builder.Select("org_id"). | ||||
| 								From("team_user", "t2"). | ||||
| 								Where(builder.Eq{"uid": u.ID}))))). | ||||
| 			Count(new(TeamUser)) | ||||
| 		if err != nil { | ||||
| 			return false | ||||
| 		} | ||||
|  | ||||
| 		if count < 0 { | ||||
| 			// No common organization | ||||
| 			return false | ||||
| 		} | ||||
|  | ||||
| 		// they are in an organization together | ||||
| 		return true | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Lunny Xiao
					Lunny Xiao