From 9eff4cb4851e2bcaf1b99c8c4b797906ffe9da80 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Mon, 28 May 2018 15:49:47 +0900 Subject: [PATCH] (refs #2031) Fix permission check for the repository menu --- .../gitbucket/core/service/RepositoryService.scala | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/scala/gitbucket/core/service/RepositoryService.scala b/src/main/scala/gitbucket/core/service/RepositoryService.scala index f4ab4be19..5381b40d7 100644 --- a/src/main/scala/gitbucket/core/service/RepositoryService.scala +++ b/src/main/scala/gitbucket/core/service/RepositoryService.scala @@ -338,7 +338,7 @@ trait RepositoryService { self: AccountService => repository.originUserName.getOrElse(repository.userName), repository.originRepositoryName.getOrElse(repository.repositoryName) ), - getRepositoryManagers(repository.userName) + getRepositoryManagers(repository.userName, repository.repositoryName) ) } } @@ -407,7 +407,7 @@ trait RepositoryService { self: AccountService => if (withoutPhysicalInfo) { Nil } else { - getRepositoryManagers(repository.userName) + getRepositoryManagers(repository.userName, repository.repositoryName) } ) } @@ -485,18 +485,21 @@ trait RepositoryService { self: AccountService => if (withoutPhysicalInfo) { Nil } else { - getRepositoryManagers(repository.userName) + getRepositoryManagers(repository.userName, repository.repositoryName) } ) } } - private def getRepositoryManagers(userName: String)(implicit s: Session): Seq[String] = + /** + * TODO It seems to be able to improve performance. For example, RequestCache can be used for getAccountByUserName call. + */ + private def getRepositoryManagers(userName: String, repositoryName: String)(implicit s: Session): Seq[String] = if (getAccountByUserName(userName).exists(_.isGroupAccount)) { getGroupMembers(userName).collect { case x if (x.isManager) => x.userName } } else { Seq(userName) - } + } ++ getCollaboratorUserNames(userName, repositoryName, Seq(Role.ADMIN)) /** * Updates the last activity date of the repository.