From 37b181c5d02a7396c10bf5f90b10d735b9ac737e Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Sun, 8 Oct 2017 04:17:05 +0900 Subject: [PATCH] (refs #1725) Allow administrators in collaborators to force to merge PR --- .../core/service/ProtectedBranchService.scala | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/scala/gitbucket/core/service/ProtectedBranchService.scala b/src/main/scala/gitbucket/core/service/ProtectedBranchService.scala index 36b00bf12..65d0aaa6a 100644 --- a/src/main/scala/gitbucket/core/service/ProtectedBranchService.scala +++ b/src/main/scala/gitbucket/core/service/ProtectedBranchService.scala @@ -1,11 +1,10 @@ package gitbucket.core.service -import gitbucket.core.model.{ProtectedBranch, ProtectedBranchContext, CommitState} +import gitbucket.core.model.{Session => _, _} import gitbucket.core.plugin.ReceiveHook import gitbucket.core.model.Profile._ import gitbucket.core.model.Profile.profile.blockingApi._ - -import org.eclipse.jgit.transport.{ReceivePack, ReceiveCommand} +import org.eclipse.jgit.transport.{ReceiveCommand, ReceivePack} trait ProtectedBranchService { @@ -79,10 +78,19 @@ object ProtectedBranchService { * Include administrators * Enforce required status checks for repository administrators. */ - includeAdministrators: Boolean) extends AccountService with CommitStatusService { + includeAdministrators: Boolean) extends AccountService with RepositoryService with CommitStatusService { def isAdministrator(pusher: String)(implicit session: Session): Boolean = - pusher == owner || getGroupMembers(owner).exists(gm => gm.userName == pusher && gm.isManager) + pusher == owner || getGroupMembers(owner).exists(gm => gm.userName == pusher && gm.isManager) || + getCollaborators(owner, repository).exists { case (collaborator, isGroup) => + if(collaborator.role == Role.ADMIN.name){ + if(isGroup){ + getGroupMembers(collaborator.collaboratorName).exists(gm => gm.userName == pusher) + } else { + collaborator.collaboratorName == pusher + } + } else false + } /** * Can't be force pushed