* Finish task#100463

This commit is contained in:
zenggang
2023-08-15 06:06:35 +00:00
parent 95d560e306
commit 8619d2bc64
12 changed files with 188 additions and 76 deletions
+1 -1
View File
@@ -2059,7 +2059,7 @@ class InstanceModel extends model
if($action == 'uninstall') return $instance->type != 'external' && $this->canDo('uninstall', $instance);
if($action == 'visit') return $instance->type != 'external' ? ($instance->domain && $this->canDo('visit', $instance)) : true;
if($action == 'upgrade') return !empty($instance->latestVersion);
if($action == 'bindUser') return ($instance->externalID && in_array($instance->appName, array('Gitlab', 'Gitea', 'Gogs'))) ? true : false;
if($action == 'bindUser') return ($instance->externalID && in_array($instance->appName, array('GitLab', 'Gitea', 'Gogs'))) ? true : false;
if($action == 'edit') return $instance->type != 'external' ? false : true;
return true;
-7
View File
@@ -116,13 +116,6 @@ function changeRepo(event)
$('#svnDirBox').append(html);
})
}
var triggerOptions = $('#triggerType').zui('picker').options.items;
for(i in triggerOptions)
{
if(triggerOptions[i].value == 'tag') triggerOptions[i].text = data.type == 'gitlab' ? buildTag : dirChange;
}
$('#triggerType').zui('picker').render({items: triggerOptions});
}
});
+23 -2
View File
@@ -81,15 +81,16 @@ function onScmChange()
}
(scm == 'Git') ? $('.tips-git').removeClass('hidden') : $('.tips-git').addClass('hidden');
if(scm == 'Git' || scm == 'Gitea' || scm == 'Gogs')
{
$('.account-fields').hide();
$('.account-fields').addClass('hidden');
$('#path').attr('placeholder', pathGitTip);
$('#client').attr('placeholder', clientGitTip);
}
else
{
$('.account-fields').show();
$('.account-fields').removeClass('hidden');
$('#path').attr('placeholder', pathSvnTip);
$('#client').attr('placeholder', clientSvnTip);
}
@@ -125,3 +126,23 @@ function onScmChange()
});
}
}
/**
* On acl change event.
*
* @param event $event
* @access public
* @return void
*/
function onAclChange(event)
{
const acl = $(event.target).val();
if(acl == 'private' || acl == 'custom')
{
$('#whitelist').removeClass('hidden');
}
else
{
$('#whitelist').addClass('hidden');
}
}
+30 -3
View File
@@ -58,7 +58,14 @@ function onProjectChange()
*/
function onScmChange(event)
{
var scm = $('[name=SCM]').val();
if(typeof(event) == 'object')
{
var scm = $(event.target).val();
}
else
{
var scm = repoSCM;
}
if(!scm)
{
for(i in scmList)
@@ -71,13 +78,13 @@ function onScmChange(event)
(scm == 'Git') ? $('.tips-git').removeClass('hidden') : $('.tips-git').addClass('hidden');
if(scm == 'Git' || scm == 'Gitea' || scm == 'Gogs')
{
$('.account-fields').hide();
$('.account-fields').addClass('hidden');
$('#path').attr('placeholder', pathGitTip);
$('#client').attr('placeholder', clientGitTip);
}
else
{
$('.account-fields').show();
$('.account-fields').removeClass('hidden');
$('#path').attr('placeholder', pathSvnTip);
$('#client').attr('placeholder', clientSvnTip);
}
@@ -116,3 +123,23 @@ function onScmChange(event)
}
}
}
/**
* On acl change event.
*
* @param event $event
* @access public
* @return void
*/
function onAclChange(event)
{
const acl = $(event.target).val();
if(acl == 'private' || acl == 'custom')
{
$('#whitelist').removeClass('hidden');
}
else
{
$('#whitelist').addClass('hidden');
}
}
+4 -1
View File
@@ -108,7 +108,7 @@ $lang->repo->file = 'File';
$lang->repo->action = 'Action';
$lang->repo->code = 'Code';
$lang->repo->review = 'Repo Review';
$lang->repo->acl = 'Privilege';
$lang->repo->acl = 'ACL';
$lang->repo->group = 'Group';
$lang->repo->user = 'User';
$lang->repo->info = 'Version Info';
@@ -179,6 +179,7 @@ $lang->repo->placeholder->gitlabHost = 'Input url of gitlab';
$lang->repo->notice = new stdclass();
$lang->repo->notice->syncing = 'Synchronizing. Please wait ...';
$lang->repo->notice->syncComplete = 'Synchronized. Now redirecting ...';
$lang->repo->notice->syncFailed = 'Synchronized failed.';
$lang->repo->notice->syncedCount = 'The number of records synchronized is ';
$lang->repo->notice->delete = 'Do you want to delete this repo?';
$lang->repo->notice->successDelete = 'Repository is removed.';
@@ -240,3 +241,5 @@ $lang->repo->typeList['performance'] = 'Performance';
$lang->repo->typeList['security'] = 'Security';
$lang->repo->typeList['redundancy'] = 'Redundancy';
$lang->repo->typeList['logicError'] = 'Logic Error';
$lang->repo->featureBar['maintain']['all'] = 'All';
+2 -1
View File
@@ -108,7 +108,7 @@ $lang->repo->file = 'File';
$lang->repo->action = 'Action';
$lang->repo->code = 'Code';
$lang->repo->review = 'Repo Review';
$lang->repo->acl = 'Privilege';
$lang->repo->acl = 'ACL';
$lang->repo->group = 'Group';
$lang->repo->user = 'User';
$lang->repo->info = 'Version Info';
@@ -179,6 +179,7 @@ $lang->repo->placeholder->gitlabHost = 'Input url of gitlab';
$lang->repo->notice = new stdclass();
$lang->repo->notice->syncing = 'Synchronizing. Please wait ...';
$lang->repo->notice->syncComplete = 'Synchronized. Now redirecting ...';
$lang->repo->notice->syncFailed = 'Synchronized failed.';
$lang->repo->notice->syncedCount = 'The number of records synchronized is ';
$lang->repo->notice->delete = 'Do you want to delete this repo?';
$lang->repo->notice->successDelete = 'Repository is removed.';
+4 -1
View File
@@ -108,7 +108,7 @@ $lang->repo->file = 'Fichier';
$lang->repo->action = 'Action';
$lang->repo->code = 'Code';
$lang->repo->review = 'Révision Ref';
$lang->repo->acl = 'Privilège';
$lang->repo->acl = 'ACL';
$lang->repo->group = 'Groupe';
$lang->repo->user = 'User';
$lang->repo->info = 'Info Version';
@@ -179,6 +179,7 @@ $lang->repo->placeholder->gitlabHost = 'Input url of gitlab';
$lang->repo->notice = new stdclass();
$lang->repo->notice->syncing = 'Synchronisation en cours. Veuillez patienter ...';
$lang->repo->notice->syncComplete = 'Synchronisé. Vous allez être redirigé ...';
$lang->repo->notice->syncFailed = 'Synchronized failed.';
$lang->repo->notice->syncedCount = "Le nombre d'enregistrements synchronisés est ";
$lang->repo->notice->delete = 'Etes vous certain de vouloir supprimer ce référentiel ?';
$lang->repo->notice->successDelete = 'Le référentiel est supprimé.';
@@ -240,3 +241,5 @@ $lang->repo->typeList['performance'] = 'Performance';
$lang->repo->typeList['security'] = 'Securité';
$lang->repo->typeList['redundancy'] = 'Redondance';
$lang->repo->typeList['logicError'] = 'Erreur Logique';
$lang->repo->featureBar['maintain']['all'] = 'All';
+6 -1
View File
@@ -108,7 +108,7 @@ $lang->repo->file = '文件';
$lang->repo->action = '操作';
$lang->repo->code = '代码';
$lang->repo->review = '评审';
$lang->repo->acl = '权限';
$lang->repo->acl = '访问控制';
$lang->repo->group = '分组';
$lang->repo->user = '用户';
$lang->repo->info = '版本信息';
@@ -166,6 +166,10 @@ $lang->repo->scmList['Gitea'] = 'Gitea';
$lang->repo->scmList['Git'] = '本地 Git';
$lang->repo->scmList['Subversion'] = 'Subversion';
$lang->repo->aclList['private'] = '私有 (所属产品和相关项目人员可访问)';
$lang->repo->aclList['open'] = '公开 (有DevOps视图权限即可访问)';
$lang->repo->aclList['custom'] = '自定义';
$lang->repo->gitlabHost = 'GitLab Server';
$lang->repo->gitlabToken = 'GitLab Token';
$lang->repo->gitlabProject = 'GitLab 项目';
@@ -179,6 +183,7 @@ $lang->repo->placeholder->gitlabHost = '请填写GitLab访问地址';
$lang->repo->notice = new stdclass();
$lang->repo->notice->syncing = '正在同步中, 请稍等...';
$lang->repo->notice->syncComplete = '同步完成,正在跳转...';
$lang->repo->notice->syncFailed = '同步失败';
$lang->repo->notice->syncedCount = '已经同步记录条数';
$lang->repo->notice->delete = '是否要删除该代码库?';
$lang->repo->notice->successDelete = '已经成功删除代码库。';
+21 -2
View File
@@ -11,8 +11,23 @@ class repoModel extends model
public function checkPriv($repo)
{
$account = $this->app->user->account;
if(strpos(",{$this->app->company->admins},", ",$account,") !== false) return true;
if(empty($repo->acl->groups) and empty($repo->acl->users)) return true;
$acl = !empty($repo->acl->acl) ? $repo->acl->acl : 'custom';
if(strpos(",{$this->app->company->admins},", ",$account,") !== false || $acl == 'open') return true;
if($acl == 'custom' && empty($repo->acl->groups) && empty($repo->acl->users)) return true;
if($acl == 'private')
{
$userProjects = explode(',', $this->app->user->view->projects);
$userProducts = explode(',', $this->app->user->view->products);
$repoProjects = explode(',', $repo->projects);
$repoProducts = explode(',', $repo->product);
$sameProjects = array_intersect($userProjects, $repoProjects);
$sameProducts = array_intersect($userProducts, $repoProducts);
if(!empty($sameProjects) || !empty($sameProducts)) return true;
}
if(!empty($repo->acl->groups))
{
foreach($this->app->user->groups as $group)
@@ -21,6 +36,7 @@ class repoModel extends model
}
}
if(!empty($repo->acl->users) and in_array($account, $repo->acl->users)) return true;
return false;
}
@@ -589,7 +605,10 @@ class repoModel extends model
if($repo->encrypt == 'base64') $repo->password = base64_decode($repo->password);
$repo->codePath = $repo->path;
if(in_array(strtolower($repo->SCM), $this->config->repo->gitServiceList)) $repo = $this->processGitService($repo);
$repo->acl = json_decode($repo->acl);
if(empty($repo->acl)) $repo->acl = new stdclass();
if(empty($repo->acl->acl)) $repo->acl->acl = 'custom';
return $repo;
}
+48 -28
View File
@@ -81,6 +81,7 @@ formPanel
(
set::width('1/2'),
set::name("serviceProject"),
set::items(array()),
set::label($lang->repo->serviceProject),
set::control("picker"),
),
@@ -162,38 +163,57 @@ formPanel
)
)
),
formGroup
formRow
(
set::label($lang->repo->acl),
inputGroup
set::id('aclList'),
formGroup
(
$lang->repo->group,
width('full'),
control(set(array
(
'name' => "acl[groups][]",
'id' => "aclgroups",
'value' => NULL,
'type' => "picker",
'items' => $groups,
'multiple' => true
)))
),
inputGroup
(
$lang->repo->user,
control(set(array
(
'name' => "acl[users][]",
'id' => "aclusers",
'value' => NULL,
'type' => "picker",
'items' => $users,
'multiple' => true
))),
setClass('mt-2')
set::width('1/2'),
set::name('acl[acl]'),
set::label($lang->repo->acl),
set::control('radioList'),
set::items($lang->repo->aclList),
set::value('open'),
on::change('onAclChange'),
)
),
formRow
(
set::id('whitelist'),
setClass('hidden'),
formGroup
(
set::label($lang->product->whitelist),
inputGroup
(
$lang->repo->group,
width('full'),
control(set(array
(
'name' => "acl[groups][]",
'id' => "aclgroups",
'value' => NULL,
'type' => "picker",
'items' => $groups,
'multiple' => true
)))
),
inputGroup
(
$lang->repo->user,
control(set(array
(
'name' => "acl[users][]",
'id' => "aclusers",
'value' => NULL,
'type' => "picker",
'items' => $users,
'multiple' => true
))),
setClass('mt-2')
)
),
),
formGroup
(
set::name("desc"),
+48 -28
View File
@@ -15,6 +15,7 @@ jsVar('pathSvnTip', $lang->repo->example->path->svn);
jsVar('clientGitTip', $lang->repo->example->client->git);
jsVar('clientSvnTip', $lang->repo->example->client->svn);
jsVar('scmList', $lang->repo->scmList);
jsVar('repoSCM', $repo->SCM);
formPanel
(
@@ -168,38 +169,57 @@ formPanel
)
)
),
formGroup
formRow
(
set::label($lang->repo->acl),
inputGroup
set::id('aclList'),
formGroup
(
$lang->repo->group,
width('full'),
control(set(array
(
'name' => "acl[groups][]",
'id' => "aclgroups",
'value' => empty($repo->acl->groups) ? '' : implode(',', $repo->acl->groups),
'type' => "picker",
'items' => $groups,
'multiple' => true
)))
),
inputGroup
(
$lang->repo->user,
control(set(array
(
'name' => "acl[users][]",
'id' => "aclusers",
'value' => empty($repo->acl->users) ? '' : implode(',', $repo->acl->users),
'type' => "picker",
'items' => $users,
'multiple' => true
))),
setClass('mt-2')
set::width('1/2'),
set::name('acl[acl]'),
set::label($lang->repo->acl),
set::control('radioList'),
set::items($lang->repo->aclList),
set::value($repo->acl->acl),
on::change('onAclChange'),
)
),
formRow
(
set::id('whitelist'),
$repo->acl->acl == 'open' ? setClass('hidden') : null,
formGroup
(
set::label($lang->product->whitelist),
inputGroup
(
$lang->repo->group,
width('full'),
control(set(array
(
'name' => "acl[groups][]",
'id' => "aclgroups",
'value' => empty($repo->acl->groups) ? '' : implode(',', $repo->acl->groups),
'type' => "picker",
'items' => $groups,
'multiple' => true
)))
),
inputGroup
(
$lang->repo->user,
control(set(array
(
'name' => "acl[users][]",
'id' => "aclusers",
'value' => empty($repo->acl->users) ? '' : implode(',', $repo->acl->users),
'type' => "picker",
'items' => $users,
'multiple' => true
))),
setClass('mt-2')
)
),
),
formGroup
(
set::name("desc"),
+1 -1
View File
@@ -34,13 +34,13 @@ class repoZen extends repo
->setIf($this->post->SCM == 'Git', 'account', '')
->setIf($this->post->SCM == 'Git', 'password', '')
->setIf(in_array($this->post->SCM, array('Gitea', 'Gogs')), 'path', $_POST['path'])
->setIf($this->post->acl != '', 'acl', json_encode($this->post->acl))
->setIf($this->post->encrypt == 'base64', 'password', base64_encode($this->post->password))
->skipSpecial('path,client,account,password')
->setDefault('product', '')->join('product', ',')
->setDefault('projects', '')->join('projects', ',')
->get();
if($this->post->acl != '') $repo->acl = json_encode($this->post->acl);
if($repo->SCM == 'Subversion')
{
$scm = $this->app->loadClass('scm');