Преглед на файлове

Merge pull request #961 from phsmit/access_removecoll

Remove collaborators when removing and transferring repository
无闻 преди 10 години
родител
ревизия
125fe92a19
променени са 1 файла, в които са добавени 15 реда и са изтрити 0 реда
  1. 15 0
      models/repo.go

+ 15 - 0
models/repo.go

@@ -670,6 +670,19 @@ func TransferOwnership(u *User, newOwner string, repo *Repository) error {
 		return err
 	}
 
+	// Remove redundant collaborators
+	collaborators, err := repo.GetCollaborators()
+	if err != nil {
+		return err
+	}
+	for _, c := range collaborators {
+		if c.Id == newUser.Id || newUser.IsOrgMember(c.Id) {
+			if _, err = sess.Delete(&Collaboration{RepoID: repo.Id, UserID: c.Id}); err != nil {
+				return err
+			}
+		}
+	}
+
 	// Update user repository number.
 	if _, err = sess.Exec("UPDATE `user` SET num_repos = num_repos + 1 WHERE id = ?", newUser.Id); err != nil {
 		return err
@@ -778,6 +791,8 @@ func DeleteRepository(uid, repoId int64, userName string) error {
 		return err
 	} else if _, err = sess.Delete(&Release{RepoId: repoId}); err != nil {
 		return err
+	} else if _, err = sess.Delete(&Collaboration{RepoID: repoId}); err != nil {
+		return err
 	}
 
 	// Delete comments.