mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:56:10 +01:00 
			
		
		
		
	Backport #35501 by lynxplay
This commit is contained in:
		| @@ -348,10 +348,8 @@ func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, use | |||||||
|  |  | ||||||
| 	for _, u := range repo.Units { | 	for _, u := range repo.Units { | ||||||
| 		for _, team := range teams { | 		for _, team := range teams { | ||||||
| 			unitAccessMode := minAccessMode | 			teamMode, _ := team.UnitAccessModeEx(ctx, u.Type) | ||||||
| 			if teamMode, exist := team.UnitAccessModeEx(ctx, u.Type); exist { | 			unitAccessMode := max(perm.unitsMode[u.Type], minAccessMode, teamMode) | ||||||
| 				unitAccessMode = max(perm.unitsMode[u.Type], unitAccessMode, teamMode) |  | ||||||
| 			} |  | ||||||
| 			perm.unitsMode[u.Type] = unitAccessMode | 			perm.unitsMode[u.Type] = unitAccessMode | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -197,4 +197,37 @@ func TestGetUserRepoPermission(t *testing.T) { | |||||||
| 		assert.Equal(t, perm_model.AccessModeWrite, perm.unitsMode[unit.TypeCode]) | 		assert.Equal(t, perm_model.AccessModeWrite, perm.unitsMode[unit.TypeCode]) | ||||||
| 		assert.Equal(t, perm_model.AccessModeRead, perm.unitsMode[unit.TypeIssues]) | 		assert.Equal(t, perm_model.AccessModeRead, perm.unitsMode[unit.TypeIssues]) | ||||||
| 	}) | 	}) | ||||||
|  |  | ||||||
|  | 	repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3}) // org private repo, same org as repo 32 | ||||||
|  | 	require.NoError(t, repo3.LoadOwner(ctx)) | ||||||
|  | 	require.True(t, repo3.Owner.IsOrganization()) | ||||||
|  | 	require.NoError(t, db.TruncateBeans(ctx, &organization.TeamUnit{}, &Access{})) // The user has access set of that repo, remove it, it is useless for our test | ||||||
|  | 	require.NoError(t, db.Insert(ctx, &organization.TeamRepo{OrgID: org.ID, TeamID: team.ID, RepoID: repo3.ID})) | ||||||
|  | 	t.Run("DoerWithNoopTeamOnPrivateRepo", func(t *testing.T) { | ||||||
|  | 		perm, err := GetUserRepoPermission(ctx, repo3, user) | ||||||
|  | 		require.NoError(t, err) | ||||||
|  | 		assert.Equal(t, perm_model.AccessModeNone, perm.AccessMode) | ||||||
|  | 		assert.Equal(t, perm_model.AccessModeNone, perm.unitsMode[unit.TypeCode]) | ||||||
|  | 		assert.Equal(t, perm_model.AccessModeNone, perm.unitsMode[unit.TypeIssues]) | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	require.NoError(t, db.Insert(ctx, &organization.TeamUnit{OrgID: org.ID, TeamID: team.ID, Type: unit.TypeCode, AccessMode: perm_model.AccessModeNone})) | ||||||
|  | 	require.NoError(t, db.Insert(ctx, &organization.TeamUnit{OrgID: org.ID, TeamID: team.ID, Type: unit.TypeIssues, AccessMode: perm_model.AccessModeRead})) | ||||||
|  | 	t.Run("DoerWithReadIssueTeamOnPrivateRepo", func(t *testing.T) { | ||||||
|  | 		perm, err := GetUserRepoPermission(ctx, repo3, user) | ||||||
|  | 		require.NoError(t, err) | ||||||
|  | 		assert.Equal(t, perm_model.AccessModeNone, perm.AccessMode) | ||||||
|  | 		assert.Equal(t, perm_model.AccessModeNone, perm.unitsMode[unit.TypeCode]) | ||||||
|  | 		assert.Equal(t, perm_model.AccessModeRead, perm.unitsMode[unit.TypeIssues]) | ||||||
|  | 	}) | ||||||
|  |  | ||||||
|  | 	require.NoError(t, db.Insert(ctx, repo_model.Collaboration{RepoID: repo3.ID, UserID: user.ID, Mode: perm_model.AccessModeWrite})) | ||||||
|  | 	require.NoError(t, db.Insert(ctx, Access{RepoID: repo3.ID, UserID: user.ID, Mode: perm_model.AccessModeWrite})) | ||||||
|  | 	t.Run("DoerWithReadIssueTeamAndWriteCollaboratorOnPrivateRepo", func(t *testing.T) { | ||||||
|  | 		perm, err := GetUserRepoPermission(ctx, repo3, user) | ||||||
|  | 		require.NoError(t, err) | ||||||
|  | 		assert.Equal(t, perm_model.AccessModeWrite, perm.AccessMode) | ||||||
|  | 		assert.Equal(t, perm_model.AccessModeWrite, perm.unitsMode[unit.TypeCode]) | ||||||
|  | 		assert.Equal(t, perm_model.AccessModeWrite, perm.unitsMode[unit.TypeIssues]) | ||||||
|  | 	}) | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user