fix: migrate broken team authorize access mode (#39579)

* fix:  #39571
* ref: https://github.com/go-gitea/gitea/pull/38938#pullrequestreview-4945228548
* fix the bug in `assignTeamPermissionUnits` which can result in wrong team access

---------

Signed-off-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
wxiaoguang authored and GitHub committed 2026-10-05 09:03:34 +00:00
1 parent b71967b254
commit b0d5a63e7a
7 files changed
+118 -2

No files matched your search

+19
View File
@@ -109,6 +109,16 @@ func TestAPITeam(t *testing.T) {
checkTeamResponse(t, "EditTeam1_DescOnly", apiTeam, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories, api.AccessLevelName(teamToEdit.Permission), nil)
checkTeamBean(t, apiTeam.ID, teamToEdit.Name, *teamToEditDesc.Description, *teamToEdit.IncludesAllRepositories, api.AccessLevelName(teamToEdit.Permission), nil)
// Edit team to granular permissions, team's permission should be reset to none
req = NewRequestWithJSON(t, "PATCH", fmt.Sprintf("/api/v1/teams/%d", teamID), api.EditTeamOption{
Permission: "read",
Units: []string{"repo.code", "repo.issues"},
}).AddTokenAuth(token)
resp = MakeRequest(t, req, http.StatusOK)
apiTeam = DecodeJSON(t, resp, &api.Team{})
checkTeamResponse(t, "EditTeam1_Granular", apiTeam, teamToEdit.Name, editDescription, editFalse, api.AccessLevelNameNone, expectedTeamUnitsMap)
checkTeamBean(t, teamID, teamToEdit.Name, editDescription, editFalse, api.AccessLevelNameNone, expectedTeamUnitsMap)
// Read team.
teamRead := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
assert.NoError(t, teamRead.LoadUnits(t.Context()))
@@ -139,6 +149,15 @@ func TestAPITeam(t *testing.T) {
checkTeamBean(t, apiTeam.ID, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories, api.AccessLevelNameNone, teamToCreate.UnitsMap)
teamID = apiTeam.ID
// Create a team with permission=write, then edit it to granular permissions later, team's permission should be reset to none
req = NewRequestWithJSON(t, "PATCH", fmt.Sprintf("/api/v1/teams/%d", teamID), api.EditTeamOption{
Permission: "write",
}).AddTokenAuth(token)
resp = MakeRequest(t, req, http.StatusOK)
apiTeam = DecodeJSON(t, resp, &api.Team{})
checkTeamResponse(t, "EditTeam2_Write", apiTeam, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories, api.AccessLevelNameWrite, nil)
checkTeamBean(t, teamID, teamToCreate.Name, teamToCreate.Description, teamToCreate.IncludesAllRepositories, api.AccessLevelNameWrite, nil)
// Edit team.
editDescription = "team 1"
editFalse = false