From 6557ff6ddfb84e8f504a88b9779e6db8d1e759fa Mon Sep 17 00:00:00 2001 From: caoyanyi Date: Tue, 5 Jul 2022 14:47:40 +0800 Subject: [PATCH] * Modify gitlab access check. --- module/gitlab/control.php | 6 +++++- module/gitlab/js/managegroupmembers.js | 1 + module/gitlab/view/browse.html.php | 9 ++++----- module/gitlab/view/browsegroup.html.php | 6 +++--- module/gitlab/view/browseproject.html.php | 16 ++++++++-------- module/gitlab/view/browseuser.html.php | 4 ++-- module/repo/model.php | 4 ++-- module/repo/view/maintain.html.php | 6 ------ 8 files changed, 25 insertions(+), 27 deletions(-) diff --git a/module/gitlab/control.php b/module/gitlab/control.php index 955314b974..ef135e3b6f 100644 --- a/module/gitlab/control.php +++ b/module/gitlab/control.php @@ -702,7 +702,10 @@ class gitlab extends control $project->isMaintainer = $this->gitlab->checkUserAccess($gitlabID, $project->id, $project, $groupIDList, 'maintainer'); } - $gitlab = $this->gitlab->getByID($gitlabID); + $gitlab = $this->gitlab->getByID($gitlabID); + $repos = $this->loadModel('repo')->getGitLabRepoList($gitlabID); + $repoPairs = array(); + foreach($repos as $repo) $repoPairs[$repo->path] = $repo->id; $this->view->gitlab = $gitlab; $this->view->keyword = urldecode(urldecode($keyword)); @@ -711,6 +714,7 @@ class gitlab extends control $this->view->gitlabID = $gitlabID; $this->view->gitlabProjectList = $result['projects']; $this->view->orderBy = $orderBy; + $this->view->repoPairs = $repoPairs; $this->display(); } diff --git a/module/gitlab/js/managegroupmembers.js b/module/gitlab/js/managegroupmembers.js index a9391db43b..48aaa55e1b 100644 --- a/module/gitlab/js/managegroupmembers.js +++ b/module/gitlab/js/managegroupmembers.js @@ -41,6 +41,7 @@ function addItem(obj) */ function deleteItem(obj) { + if($(obj).hasClass('disabled')) return false; if($('#teamForm .table-form tbody').children().length < 2) return false; $(obj).closest('tr').remove(); } diff --git a/module/gitlab/view/browse.html.php b/module/gitlab/view/browse.html.php index 56b57a028c..af931fd6d9 100644 --- a/module/gitlab/view/browse.html.php +++ b/module/gitlab/view/browse.html.php @@ -55,11 +55,10 @@ url, $gitlab->url, '_target');?> isAdminToken) ? '' : 'disabled'; - $notBind = $gitlab->isBindUser ? '' : 'disabled'; - common::printLink('gitlab', 'edit', "gitlabID=$id", " ", '',"title='{$lang->gitlab->edit}' class='btn btn-primary'"); - common::printLink('gitlab', 'bindUser', "id=$id", " ", '', "title='{$lang->gitlab->bindUser}' class='btn {$disabled} {$notBind}' ,'disabled'"); - if(common::hasPriv('gitlab', 'delete')) echo html::a($this->createLink('gitlab', 'delete', "gitlabID=$id"), '', 'hiddenwin', "title='{$lang->gitlab->delete}' class='btn'"); + $disabled = (empty($gitlab->isAdminToken) or !$gitlab->isBindUser) ? false : true; + common::printIcon('gitlab', 'edit', "gitlabID=$id", '', 'list', 'edit'); + echo common::buildIconButton('gitlab', 'bindUser', "gitlabID=$id", '', 'list', 'link', '', '', false, '', '', 0, $disabled); + common::printIcon('gitlab', 'delete', "gitlabID=$id", '', 'list', 'trash', 'hiddenwin'); ?> diff --git a/module/gitlab/view/browsegroup.html.php b/module/gitlab/view/browsegroup.html.php index de8a145dc9..cb0a0e07f6 100644 --- a/module/gitlab/view/browsegroup.html.php +++ b/module/gitlab/view/browsegroup.html.php @@ -59,10 +59,10 @@ created_at, 0, 10);?> user->admin or in_array($gitlabGroup->id, $adminGroupIDList)) ? '' : 'disabled'; + $isAdmin = ($app->user->admin or in_array($gitlabGroup->id, $adminGroupIDList)) ? true : false; common::printLink('gitlab', 'manageGroupMembers', "gitlabID=$gitlabID&groupID=$gitlabGroup->id", " ", '',"title='{$lang->gitlab->group->manageMembers}' class='btn'"); - common::printLink('gitlab', 'editGroup', "gitlabID=$gitlabID&groupID=$gitlabGroup->id", " ", '', "title='{$lang->gitlab->group->edit}' class='btn {$adminClass}'"); - if(common::hasPriv('gitlab', 'delete')) echo html::a($this->createLink('gitlab', 'deleteGroup', "gitlabID=$gitlabID&groupID=$gitlabGroup->id"), '', 'hiddenwin', "title='{$lang->gitlab->deleteGroup}' class='btn {$adminClass}'"); + echo common::buildIconButton('gitlab', 'editGroup', "gitlabID=$gitlabID&groupID=$gitlabGroup->id", '', 'list', 'edit', '', '', false, '', '', 0, $isAdmin); + echo common::buildIconButton('gitlab', 'deleteGroup', "gitlabID=$gitlabID&groupID=$gitlabGroup->id", '', 'list', 'trash', 'hiddenwin', '', false, '', '', 0, $isAdmin); ?> diff --git a/module/gitlab/view/browseproject.html.php b/module/gitlab/view/browseproject.html.php index f27d25ea31..286ff6c9a7 100644 --- a/module/gitlab/view/browseproject.html.php +++ b/module/gitlab/view/browseproject.html.php @@ -45,7 +45,7 @@ gitlab->project->name);?> gitlab->lastUpdate;?> - actions;?> + actions;?> @@ -60,13 +60,13 @@ last_activity_at, 0, 10);?> isMaintainer ? '' : 'disabled'; - $ownerClass = $gitlabProject->adminer ? '' : 'disabled'; - $emptyBranchClass = $gitlabProject->default_branch ? '' : 'disabled'; - common::printLink('gitlab', 'browseBranchPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->branch->accessLevel}' class='btn {$maintainerClass} {$emptyBranchClass}'"); - common::printLink('gitlab', 'browseTagPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->browseTagPriv}' class='btn {$maintainerClass} {$emptyBranchClass}'"); - common::printLink('gitlab', 'editProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id", " ", '', "title='{$lang->gitlab->project->edit}' class='btn {$ownerClass}'"); - if(common::hasPriv('gitlab', 'delete')) echo html::a($this->createLink('gitlab', 'deleteProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id"), '', 'hiddenwin', "title='{$lang->gitlab->deleteProject}' class='btn {$ownerClass}'"); + echo common::buildIconButton('gitlab', 'browseBranchPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'branch-lock', '', '', false, '', '', 0, ($gitlabProject->isMaintainer and $gitlabProject->default_branch)); + echo common::buildIconButton('gitlab', 'browseTagPriv', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'tag-lock', '', '', false, '', '', 0, ($gitlabProject->isMaintainer and $gitlabProject->default_branch)); + echo common::buildIconButton('gitlab', 'manageProjectMembers', 'repoID=' . zget($repoPairs, $gitlabProject->id), '', 'list', 'team', '', '', false, '', '', 0, isset($repoPairs[$gitlabProject->id])); + echo common::buildIconButton('gitlab', 'createWebhook', 'repoID=' . zget($repoPairs, $gitlabProject->id), '', 'list', 'change', 'hiddenwin', '', false, '', '', 0, isset($repoPairs[$gitlabProject->id])); + echo common::buildIconButton('gitlab', 'importIssue', 'repoID=' . zget($repoPairs, $gitlabProject->id), '', 'list', 'link', '', '', false, '', '', 0, isset($repoPairs[$gitlabProject->id])); + echo common::buildIconButton('gitlab', 'editProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'edit', '', '', false, '', '', 0, $gitlabProject->adminer); + echo common::buildIconButton('gitlab', 'deleteProject', "gitlabID=$gitlabID&projectID=$gitlabProject->id", '', 'list', 'trash', 'hiddenwin', '', false, '', '', 0, $gitlabProject->adminer); ?> diff --git a/module/gitlab/view/browseuser.html.php b/module/gitlab/view/browseuser.html.php index fbecaeb8ef..12ba265311 100644 --- a/module/gitlab/view/browseuser.html.php +++ b/module/gitlab/view/browseuser.html.php @@ -58,8 +58,8 @@ lastActivityOn, 0, 10);?> id", " ", '', "title='{$lang->gitlab->user->edit}' class='btn btn-primary'"); - if(common::hasPriv('gitlab', 'delete')) echo html::a($this->createLink('gitlab', 'deleteUser', "gitlabID=$gitlabID&userID=$gitlabUser->id"), '', 'hiddenwin', "title='{$lang->gitlab->deleteUser}' class='btn'" . ($isAdmin ? '' : ' disabled')); + echo common::buildIconButton('gitlab', 'editUser', "gitlabID=$gitlabID&userID=$gitlabUser->id", '', 'list', 'edit', '', '', false, '', '', 0, $isAdmin); + echo common::buildIconButton('gitlab', 'deleteUser', "gitlabID=$gitlabID&userID=$gitlabUser->id", '', 'list', 'trash', 'hiddenwin', '', false, '', '', 0, $isAdmin); ?> diff --git a/module/repo/model.php b/module/repo/model.php index c5fcfa2945..70027f2b88 100644 --- a/module/repo/model.php +++ b/module/repo/model.php @@ -2034,13 +2034,13 @@ class repoModel extends model * @param int $projectID * @return array */ - public function getGitLabRepoList($gitlabID, $projectID) + public function getGitLabRepoList($gitlabID, $projectID = 0) { return $this->dao->select('*')->from(TABLE_REPO)->where('deleted')->eq('0') ->andWhere('SCM')->eq('Gitlab') ->andWhere('synced')->eq(1) ->andWhere('client')->eq($gitlabID) - ->andWhere('path')->eq($projectID) + ->beginIF($projectID)->andWhere('path')->eq($projectID)->fi() ->fetchAll(); } diff --git a/module/repo/view/maintain.html.php b/module/repo/view/maintain.html.php index 5f1f6af6f6..c3fb93bb70 100644 --- a/module/repo/view/maintain.html.php +++ b/module/repo/view/maintain.html.php @@ -53,12 +53,6 @@ id&objectID=$objectID", '', 'list', 'edit'); - if(strtolower($repo->SCM) == "gitlab") - { - common::printIcon('gitlab', 'manageProjectMembers', "repo={$repo->id}", '', 'list', 'team'); - common::printIcon('gitlab', 'createWebhook', "repoID=$repo->id", '', 'list', 'change', 'hiddenwin'); - common::printIcon('gitlab', 'importIssue', "repo={$repo->id}", '', 'list', 'link'); - } if(isset($sonarRepoList[$repo->id])) { $jobID = $sonarRepoList[$repo->id]->id;