Browse Source
Simplify CheckUnitUser logic (#12854 )
if check one user's unit in different repos, it's not necessary to
get user data every time.
Signed-off-by: a1012112796 <1012112796@qq.com>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
mj-v1.14.3
赵智超
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
17 additions and
14 deletions
models/notification.go
models/repo.go
routers/home.go
routers/repo/repo.go
@ -199,10 +199,18 @@ func createOrUpdateIssueNotifications(e Engine, issueID, commentID, notification
// notify
for userID := range toNotify {
issue . Repo . Units = nil
if issue . IsPull && ! issue . Repo . checkUnitUser ( e , userID , false , UnitTypePullRequests ) {
user , err := getUserByID ( e , userID )
if err != nil {
if IsErrUserNotExist ( err ) {
continue
}
return err
}
if issue . IsPull && ! issue . Repo . checkUnitUser ( e , user , UnitTypePullRequests ) {
continue
}
if ! issue . IsPull && ! issue . Repo . checkUnitUser ( e , userID , false , UnitTypeIssues ) {
if ! issue . IsPull && ! issue . Repo . checkUnitUser ( e , user , UnitTypeIssues ) {
continue
}
@ -425,20 +425,17 @@ func (repo *Repository) getUnits(e Engine) (err error) {
}
// CheckUnitUser check whether user could visit the unit of this repository
func ( repo * Repository ) CheckUnitUser ( userID int64 , isAdmin bool , unitType UnitType ) bool {
return repo . checkUnitUser ( x , userID , isAdmin , unitType )
func ( repo * Repository ) CheckUnitUser ( user * User , unitType UnitType ) bool {
return repo . checkUnitUser ( x , user , unitType )
}
func ( repo * Repository ) checkUnitUser ( e Engine , userID int64 , isAdmin bool , unitType UnitType ) bool {
if i sAdmin {
func ( repo * Repository ) checkUnitUser ( e Engine , user * User , unitType UnitType ) bool {
if user . I sAdmin {
return true
}
user , err := getUserByID ( e , userID )
if err != nil {
return false
}
perm , err := getUserRepoPermission ( e , repo , user )
if err != nil {
log . Error ( "getUserRepoPermission(): %v" , err )
return false
}
@ -303,10 +303,8 @@ func ExploreCode(ctx *context.Context) {
repoIDs [ ] int64
err error
isAdmin bool
userID int64
)
if ctx . User != nil {
userID = ctx . User . ID
isAdmin = ctx . User . IsAdmin
}
@ -336,7 +334,7 @@ func ExploreCode(ctx *context.Context) {
var rightRepoMap = make ( map [ int64 ] * models . Repository , len ( repoMaps ) )
repoIDs = make ( [ ] int64 , 0 , len ( repoMaps ) )
for id , repo := range repoMaps {
if repo . CheckUnitUser ( userID , isAdmin , models . UnitTypeCode ) {
if repo . CheckUnitUser ( ctx . User , models . UnitTypeCode ) {
rightRepoMap [ id ] = repo
repoIDs = append ( repoIDs , id )
}
@ -140,7 +140,7 @@ func Create(ctx *context.Context) {
templateID := ctx . QueryInt64 ( "template_id" )
if templateID > 0 {
templateRepo , err := models . GetRepositoryByID ( templateID )
if err == nil && templateRepo . CheckUnitUser ( ctxUser . ID , ctxUser . IsAdmin , models . UnitTypeCode ) {
if err == nil && templateRepo . CheckUnitUser ( ctxUser , models . UnitTypeCode ) {
ctx . Data [ "repo_template" ] = templateID
ctx . Data [ "repo_template_name" ] = templateRepo . Name
}