diff --git a/module/gitlab/control.php b/module/gitlab/control.php index 00365ddcbd..8cd64af9d5 100644 --- a/module/gitlab/control.php +++ b/module/gitlab/control.php @@ -624,13 +624,17 @@ class gitlab extends control $result = $this->gitlab->apiGetProjectsPager($gitlabID, $keyword, $orderBy, $pager); + /* Get group id list by gitlab user that the user is maintainer. */ + $groupIDList = array(0 => 0); + $groups = $this->gitlab->apiGetGroups($gitlabID, 'name_asc', $this->config->gitlab->accessLevel['maintainer']); + foreach($groups as $group) $groupIDList[] = $group->id; + foreach($result['projects'] as $key => $project) { $project->adminer = (bool)$this->app->user->admin; if(!$project->adminer and isset($project->owner) and $project->owner->id == $openID) $project->adminer = true; - $project->userAccess = 0; - if(isset($project->permissions) and $project->permissions->project_access) $project->userAccess = (int)$project->permissions->project_access->access_level; + $project->isMaintainer = $this->gitlab->checkUserAccess($gitlabID, $openID, $project->id, $project, $groupIDList, 'maintainer'); } $gitlab = $this->gitlab->getByID($gitlabID); diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 54b723bba0..98b78615ef 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -2756,6 +2756,8 @@ class gitlabModel extends model */ public function checkUserAccess($gitlabID, $openID = 0, $projectID = 0, $project = null, $groupIDList = array(), $maxRole = 'maintainer') { + if($this->app->user->admin) return true; + if($project == null) $project = $this->apiGetSingleProject($gitlabID, $projectID); if(!$openID or !isset($project->id)) return false; diff --git a/module/gitlab/view/browseproject.html.php b/module/gitlab/view/browseproject.html.php index d60a2d782c..c964e1c2c9 100644 --- a/module/gitlab/view/browseproject.html.php +++ b/module/gitlab/view/browseproject.html.php @@ -67,13 +67,14 @@ last_activity_at, 0, 10);?> adminer or $gitlabProject->userAccess == 40) ? '' : 'disabled'; + $canManage = $gitlabProject->isMaintainer ? '' : 'disabled'; + $canDelete = $gitlabProject->adminer ? '' : 'disabled'; common::printLink('gitlab', 'browseBranch', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->browseBranch}' class='btn btn-primary'"); - common::printLink('gitlab', 'browseBranchPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->branch->accessLevel}' class='btn btn-primary {$adminClass}'"); + common::printLink('gitlab', 'browseBranchPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->branch->accessLevel}' class='btn btn-primary {$canManage}'"); common::printLink('gitlab', 'browseTag', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->browseTag}' class='btn btn-primary'"); - common::printLink('gitlab', 'browseTagPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->browseTagPriv}' class='btn btn-primary {$adminClass}'"); - common::printLink('gitlab', 'editProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->project->edit}' class='btn btn-primary {$adminClass}'"); - if(common::hasPriv('gitlab', 'delete')) echo html::a($this->createLink('gitlab', 'deleteProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id"), '', 'hiddenwin', "title='{$lang->gitlab->deleteProject}' class='btn {$adminClass}'"); + common::printLink('gitlab', 'browseTagPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->browseTagPriv}' class='btn btn-primary {$canManage}'"); + common::printLink('gitlab', 'editProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->project->edit}' class='btn btn-primary {$canManage}'"); + if(common::hasPriv('gitlab', 'delete')) echo html::a($this->createLink('gitlab', 'deleteProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id"), '', 'hiddenwin', "title='{$lang->gitlab->deleteProject}' class='btn {$canDelete}'"); ?>