@@ -249,37 +249,46 @@ func (repo *Repository) recalculateTeamAccesses(e Engine, ignTeamID int64) (err
249
249
// recalculateUserAccess recalculates new access for a single user
250
250
// Usable if we know access only affected one user
251
251
func (repo * Repository ) recalculateUserAccess (e Engine , uid int64 ) (err error ) {
252
- access := AccessModeNone
252
+ minMode := AccessModeRead
253
+ if ! repo .IsPrivate {
254
+ minMode = AccessModeWrite
255
+ }
256
+
257
+ accessMode := AccessModeNone
253
258
collaborator , err := repo .getCollaboration (e , uid )
254
259
if err != nil {
255
260
return err
256
261
} else if collaborator != nil {
257
- access = collaborator .Mode
258
- }
259
-
260
- var teams []Team
261
- if err := e .Join ("INNER" , "team_repo" , "team_repo.team_id = team.id" ).
262
- Join ("INNER" , "team_user" , "team_user.team_id = team.id" ).
263
- Where ("team.org_id = ?" , repo .OwnerID ).
264
- And ("team_repo.repo_id=?" , repo .ID ).
265
- And ("team_user.uid=?" , uid ).
266
- Find (& teams ); err != nil {
267
- return err
262
+ accessMode = collaborator .Mode
268
263
}
269
264
270
- for _ , t := range teams {
271
- if t .IsOwnerTeam () {
272
- t .Authorize = AccessModeOwner
265
+ if repo .Owner .IsOrganization () {
266
+ var teams []Team
267
+ if err := e .Join ("INNER" , "team_repo" , "team_repo.team_id = team.id" ).
268
+ Join ("INNER" , "team_user" , "team_user.team_id = team.id" ).
269
+ Where ("team.org_id = ?" , repo .OwnerID ).
270
+ And ("team_repo.repo_id=?" , repo .ID ).
271
+ And ("team_user.uid=?" , uid ).
272
+ Find (& teams ); err != nil {
273
+ return err
273
274
}
274
275
275
- access = maxAccessMode (access , t .Authorize )
276
+ for _ , t := range teams {
277
+ if t .IsOwnerTeam () {
278
+ t .Authorize = AccessModeOwner
279
+ }
280
+
281
+ accessMode = maxAccessMode (accessMode , t .Authorize )
282
+ }
276
283
}
277
284
278
285
// Delete old user accesses and insert new one for repository.
279
286
if _ , err = e .Delete (& Access {RepoID : repo .ID , UserID : uid }); err != nil {
280
287
return fmt .Errorf ("delete old user accesses: %v" , err )
281
- } else if _ , err = e .Insert (& Access {RepoID : repo .ID , UserID : uid , Mode : access }); err != nil {
282
- return fmt .Errorf ("insert new user accesses: %v" , err )
288
+ } else if accessMode >= minMode {
289
+ if _ , err = e .Insert (& Access {RepoID : repo .ID , UserID : uid , Mode : accessMode }); err != nil {
290
+ return fmt .Errorf ("insert new user accesses: %v" , err )
291
+ }
283
292
}
284
293
return nil
285
294
}
0 commit comments