From 89b9d42f083b1f83ee8fc3ba0feaaa7cf04ec05b Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Fri, 1 Apr 2022 14:05:31 +0800
Subject: [PATCH] Fix broken of team create (#19288)

* Fix broken of team create

* Update models/organization/team.go

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
---
 models/organization/team.go | 14 ++++++++------
 models/repo_permission.go   |  2 +-
 models/review.go            |  2 +-
 3 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/models/organization/team.go b/models/organization/team.go
index 1617005841..077fba6a60 100644
--- a/models/organization/team.go
+++ b/models/organization/team.go
@@ -239,15 +239,17 @@ func (t *Team) GetMembersCtx(ctx context.Context) (err error) {
 
 // UnitEnabled returns if the team has the given unit type enabled
 func (t *Team) UnitEnabled(tp unit.Type) bool {
-	return t.unitEnabled(db.DefaultContext, tp)
-}
-
-func (t *Team) unitEnabled(ctx context.Context, tp unit.Type) bool {
-	return t.UnitAccessMode(ctx, tp) > perm.AccessModeNone
+	return t.UnitAccessMode(tp) > perm.AccessModeNone
 }
 
 // UnitAccessMode returns if the team has the given unit type enabled
-func (t *Team) UnitAccessMode(ctx context.Context, tp unit.Type) perm.AccessMode {
+// it is called in templates, should not be replaced by `UnitAccessModeCtx(ctx ...)`
+func (t *Team) UnitAccessMode(tp unit.Type) perm.AccessMode {
+	return t.UnitAccessModeCtx(db.DefaultContext, tp)
+}
+
+// UnitAccessModeCtx returns if the team has the given unit type enabled
+func (t *Team) UnitAccessModeCtx(ctx context.Context, tp unit.Type) perm.AccessMode {
 	if err := t.getUnits(ctx); err != nil {
 		log.Warn("Error loading team (ID: %d) units: %s", t.ID, err.Error())
 	}
diff --git a/models/repo_permission.go b/models/repo_permission.go
index 4dfc63d4e1..3e9ad04482 100644
--- a/models/repo_permission.go
+++ b/models/repo_permission.go
@@ -250,7 +250,7 @@ func getUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use
 	for _, u := range repo.Units {
 		var found bool
 		for _, team := range teams {
-			teamMode := team.UnitAccessMode(ctx, u.Type)
+			teamMode := team.UnitAccessModeCtx(ctx, u.Type)
 			if teamMode > perm_model.AccessModeNone {
 				m := perm.UnitsMode[u.Type]
 				if m < teamMode {
diff --git a/models/review.go b/models/review.go
index 6ef8d530b6..f360d459cf 100644
--- a/models/review.go
+++ b/models/review.go
@@ -273,7 +273,7 @@ func isOfficialReviewerTeam(ctx context.Context, issue *Issue, team *organizatio
 	}
 
 	if !pr.ProtectedBranch.EnableApprovalsWhitelist {
-		return team.UnitAccessMode(ctx, unit.TypeCode) >= perm.AccessModeWrite, nil
+		return team.UnitAccessModeCtx(ctx, unit.TypeCode) >= perm.AccessModeWrite, nil
 	}
 
 	return base.Int64sContains(pr.ProtectedBranch.ApprovalsWhitelistTeamIDs, team.ID), nil