···2026202620272027 // auth filter: only owner or collaborators can close20282028 roles := f.RolesInRepo(user)20292029+ isOwner := roles.IsOwner()20292030 isCollaborator := roles.IsCollaborator()20302031 isPullAuthor := user.Did == pull.OwnerDid20312031- isCloseAllowed := isCollaborator || isPullAuthor20322032+ isCloseAllowed := isOwner || isCollaborator || isPullAuthor20322033 if !isCloseAllowed {20332034 log.Println("failed to close pull")20342035 s.pages.Notice(w, "pull-close", "You are unauthorized to close this pull.")···2095209420962095 // auth filter: only owner or collaborators can close20972096 roles := f.RolesInRepo(user)20972097+ isOwner := roles.IsOwner()20982098 isCollaborator := roles.IsCollaborator()20992099 isPullAuthor := user.Did == pull.OwnerDid21002100- isCloseAllowed := isCollaborator || isPullAuthor21002100+ isCloseAllowed := isOwner || isCollaborator || isPullAuthor21012101 if !isCloseAllowed {21022102 log.Println("failed to close pull")21032103 s.pages.Notice(w, "pull-close", "You are unauthorized to close this pull.")
+2
appview/pulls/router.go
···4444 r.Get("/", s.ResubmitPull)4545 r.Post("/", s.ResubmitPull)4646 })4747+ // permissions here require us to know pull author4848+ // it is handled within the route4749 r.Post("/close", s.ClosePull)4850 r.Post("/reopen", s.ReopenPull)4951 // collaborators only