code.gitea.io/gitea@v1.22.3/modules/repository/collaborator.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repository 5 6 import ( 7 "context" 8 9 "code.gitea.io/gitea/models/db" 10 "code.gitea.io/gitea/models/perm" 11 access_model "code.gitea.io/gitea/models/perm/access" 12 repo_model "code.gitea.io/gitea/models/repo" 13 user_model "code.gitea.io/gitea/models/user" 14 15 "xorm.io/builder" 16 ) 17 18 func AddCollaborator(ctx context.Context, repo *repo_model.Repository, u *user_model.User) error { 19 if err := repo.LoadOwner(ctx); err != nil { 20 return err 21 } 22 23 if user_model.IsUserBlockedBy(ctx, u, repo.OwnerID) || user_model.IsUserBlockedBy(ctx, repo.Owner, u.ID) { 24 return user_model.ErrBlockedUser 25 } 26 27 return db.WithTx(ctx, func(ctx context.Context) error { 28 has, err := db.Exist[repo_model.Collaboration](ctx, builder.Eq{ 29 "repo_id": repo.ID, 30 "user_id": u.ID, 31 }) 32 if err != nil { 33 return err 34 } else if has { 35 return nil 36 } 37 38 if err = db.Insert(ctx, &repo_model.Collaboration{ 39 RepoID: repo.ID, 40 UserID: u.ID, 41 Mode: perm.AccessModeWrite, 42 }); err != nil { 43 return err 44 } 45 46 return access_model.RecalculateUserAccess(ctx, repo, u.ID) 47 }) 48 }