* Fix bugs.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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 项目';
|
||||
|
||||
+20
-2
@@ -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;
|
||||
}
|
||||
|
||||
@@ -590,6 +606,8 @@ class repoModel extends model
|
||||
$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;
|
||||
}
|
||||
|
||||
|
||||
@@ -163,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"),
|
||||
|
||||
@@ -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
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user