* Refactor group: format functions, remove unused functions.

This commit is contained in:
朱金勇
2023-12-15 11:04:00 +08:00
parent 624f99f981
commit 2f83bc3034
18 changed files with 148 additions and 2556 deletions
+16 -613
View File
@@ -1,4 +1,5 @@
<?php
declare(strict_types=1);
/**
* The control file of group module of ZenTaoPMS.
*
@@ -12,12 +13,15 @@
class group extends control
{
/**
* 构造方法,将所有resource追加到package里。
* Construct function.
*
* @param $moduleName
* @param $methodName
* @access public
* @return void
*/
public function __construct($moduleName = '', $methodName = '')
public function __construct(string $moduleName = '', string $methodName = '')
{
parent::__construct($moduleName, $methodName);
$this->loadModel('user');
@@ -25,71 +29,7 @@ class group extends control
}
/**
* Append packages in resource.
*
* @access public
* @return void
*/
public function appendResourcePackages()
{
$allPrivs = array();
foreach($this->config->group->package as $packageCode => $package)
{
if(empty($package->privs)) continue;
foreach($package->privs as $privCode => $priv)
{
$allPrivs[$privCode] = $privCode;
}
}
/* Privs in resource but not in package. */
foreach($this->lang->resource as $module => $methodList)
{
foreach($methodList as $method => $methodLang)
{
if(isset($allPrivs[$module . '-' . $method])) continue;
/* Create subset. */
if(!isset($this->config->group->subset->$module))
{
$this->config->group->subset->$module = new stdclass();
$this->config->group->subset->$module->order = 10000;
$this->config->group->subset->$module->nav = $module;
}
/* Create subset. */
$methodPackage = array('create' => 'manage', 'batchcreate' => 'manage', 'browse' => 'browse', 'view' => 'browse', 'delete' => 'delete', 'batchdelete' => 'delete', 'edit' => 'manage', 'batchedit' => 'manage');
$packageName = isset($methodPackage[$method]) ? $methodPackage[$method] : 'other';
$packageCode = $module . $packageName;
if(!isset($this->config->group->package->$packageCode))
{
$this->config->group->package->$packageCode = new stdclass();
$this->config->group->package->$packageCode->order = 5;
$this->config->group->package->$packageCode->subset = $module;
$this->config->group->package->$packageCode->privs = array();
$this->lang->group->package->$packageCode = $this->lang->group->package->$packageName;
}
/* Browse action in workflow. */
if(isset($this->lang->$module->menus) && $method == 'browse')
{
$this->config->group->package->$packageCode->privs["$module-$method"] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,or', 'order' => 5, 'depend' => array(), 'recommend' => array());
foreach($this->lang->$module->menus as $flowMethod => $flowName)
{
$this->config->group->package->$packageCode->privs["$module-$flowMethod"] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,or', 'order' => 5, 'depend' => array("$module-$method"), 'recommend' => array());
}
}
else
{
$this->config->group->package->$packageCode->privs["$module-$method"] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,or', 'order' => 5, 'depend' => array(), 'recommend' => array());
}
}
}
}
/**
* 权限分组列表页面。
* Browse groups.
*
* @access public
@@ -160,6 +100,7 @@ class group extends control
}
/**
* 复制权限分组。
* Copy a group.
*
* @param int $groupID
@@ -183,6 +124,7 @@ class group extends control
}
/**
* 视野维护。
* Manage view.
*
* @param int $groupID
@@ -244,6 +186,7 @@ class group extends control
}
/**
* 分配分组权限。
* Manage privleges of a group.
*
* @param string $type byPackage|byGroup|byModule
@@ -253,7 +196,7 @@ class group extends control
* @access public
* @return void
*/
public function managePriv($type = 'byPackage', $param = 0, $nav = '', $version = '')
public function managePriv(string $type = 'byPackage', int $param = 0, string $nav = '', string $version = '')
{
if($type == 'byGroup' or $type == 'byPackage') $groupID = $param;
@@ -276,6 +219,7 @@ class group extends control
}
/**
* 维护分组成员。
* Manage members of a group.
*
* @param int $groupID
@@ -283,7 +227,7 @@ class group extends control
* @access public
* @return void
*/
public function manageMember($groupID, $deptID = 0)
public function manageMember(int $groupID, int $deptID = 0)
{
if(!empty($_POST))
{
@@ -308,6 +252,7 @@ class group extends control
}
/**
* 维护项目管理员。
* Manage members of a group.
*
* @param int $groupID
@@ -315,7 +260,7 @@ class group extends control
* @access public
* @return void
*/
public function manageProjectAdmin($groupID, $deptID = 0)
public function manageProjectAdmin(int $groupID, int $deptID = 0)
{
if(!empty($_POST))
{
@@ -354,7 +299,7 @@ class group extends control
public function delete(int $groupID)
{
$group = $this->group->getByID($groupID);
$this->group->delete($groupID);
$this->group->remove($groupID);
/* if ajax request, send result. */
if(dao::isError())
@@ -371,548 +316,6 @@ class group extends control
return $this->send($response);
}
/**
* Edit manage priv.
*
* @param string $browseType
* @param string $view
* @param int $paramID
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
public function editManagePriv($browseType = '', $view = '', $paramID = 0, $recPerPage = 100, $pageID = 1)
{
if(empty($browseType) and $browseType != 'bysearch') $browseType = $this->cookie->managePrivEditType ? $this->cookie->managePrivEditType : 'bycard';
if($browseType == 'bysearch' and $this->cookie->managePrivEditType == 'bycard') $browseType = 'bycard';
$moduleLang = $this->group->getMenuModules($view, true);
if($browseType == 'bycard')
{
$privs = $this->group->getPrivsListByView($view);
$privs = $this->group->transformPrivLang($privs);
$privPackages = $this->group->getPrivManagerPairs('package');
$privList = array();
foreach($privs as $privID => $priv)
{
if(!isset($privList[$priv->parentCode])) $privList[$priv->parentCode] = array();
if(!is_array($privList[$priv->parentCode])) $privList[$priv->parentCode] = array();
if(!isset($privList[$priv->parentCode][$priv->parent])) $privList[$priv->parentCode][$priv->parent] = array();
$privList[$priv->parentCode][$priv->parent][$priv->key] = $priv;
}
$this->view->privPackages = $privPackages;
}
else
{
$privList = $browseType != 'bysearch' ? $this->group->getPrivsListByView($view) : $this->group->getPrivsListBySearch($paramID);
$privs = $this->group->transformPrivLang($privList);
/* Pager. */
$this->app->loadClass('pager', $static = true);
$total = count($privList);
$pager = new pager($total, $recPerPage, $pageID);
$privList = array_chunk($privList, $pager->recPerPage, true);
$privList = empty($privList) ? $privList : $privList[$pageID - 1];
/* Build the search form. */
$queryID = ($browseType == 'bysearch') ? (int)$paramID : 0;
$actionURL = $this->createLink('group', 'editManagePriv', "browseType=bysearch&view=&paramID=myQueryID&recPerPage=$recPerPage");
$this->group->buildPrivSearchForm($queryID, $actionURL);
$privRelations = $this->group->getPrivRelationsByIdList(array_keys($privList));
if(!isset($privRelations['recommend'])) $privRelations['recommend'] = array();
if(!isset($privRelations['depend'])) $privRelations['depend'] = array();
$this->view->pager = $pager;
$this->view->privRelations = $privRelations;
}
$this->view->title = $this->lang->group->editManagePriv;
$this->view->browseType = $browseType;
$this->view->privList = $privList;
$this->view->packages = $this->group->getPrivPackagePairs($view);
$this->view->moduleLang = $moduleLang;
$this->view->modulePackages = $this->group->getModuleAndPackageTree();
$this->view->view = $view;
$this->display();
}
/**
* Batch change package.
*
* @param string $module
* @param int $packageID
* @access public
* @return void
*/
public function batchChangePackage($module, $packageID)
{
if(empty($_POST['privIdList'])) return print(js::reload('parent'));
$privIdList = array_unique($_POST['privIdList']);
$allChanges = $this->group->batchChangePackage($privIdList, $module, $packageID);
if(dao::isError()) return print(js::error(dao::getError()));
$this->loadModel('action');
foreach($allChanges as $privID => $changes)
{
$actionID = $this->action->create('privlang', $privID, 'Edited');
$this->action->logHistory($actionID, $changes);
}
return print(js::reload('parent'));
}
/**
* Manage privilege packages.
*
* @access public
* @return void
*/
public function managePrivPackage()
{
$this->view->title = $this->lang->group->managePrivPackage;
$this->view->packagesTreeList = $this->group->getPrivPackageTreeList();
$this->display();
}
/**
* Create a privilege package.
*
* @access public
* @return void
*/
public function createPrivPackage()
{
if(!empty($_POST))
{
$packageID = $this->group->createPrivPackage();
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
}
$this->view->title = $this->lang->group->createPrivPackage;
$this->view->modules = $this->group->getPrivModules();
$this->display();
}
/**
* Edit a privilege package.
*
* @access public
* @return void
*/
public function editPrivPackage($privPackageID)
{
if(!empty($_POST))
{
$changes = $this->group->updatePrivPackage($privPackageID);
if($changes)
{
$actionID = $this->loadModel('action')->create('privpackage', $privPackageID, 'Edited');
$this->action->logHistory($actionID, $changes);
}
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
}
$this->view->title = $this->lang->group->editPrivPackage;
$this->view->privPackage = $this->group->getPrivPackageByID($privPackageID);
$this->view->modules = $this->group->getPrivModules();
$this->view->actions = $this->loadModel('action')->getList('privpackage', $privPackageID);
$this->view->users = $this->loadModel('user')->getPairs();
$this->display();
}
/**
* Sort priv packages.
*
* @param int $parentID
* @param string $type
* @access public
* @return void
*/
public function sortPrivPackages($parentID = 0, $type = '')
{
$orders = $_POST['orders'];
if(empty($orders)) return false;
if($type == 'view')
{
$orders = str_replace('View,', ',', $orders);
$orders = trim($orders, ',');
$this->loadModel('setting')->setItem("system.priv.views", $orders);
}
if($type == 'module')
{
$orders = trim($orders, ',');
$parentID = rtrim($parentID, 'View');
$this->loadModel('setting')->setItem("system.priv.{$parentID}Modules", $orders);
}
if($type == 'package')
{
$orders = explode(',', $orders);
foreach($orders as $index => $id)
{
if(!empty($id)) $this->group->updatePackageOrder($id, ($index + 1) * 5);
}
}
}
/**
* Delete a priv package.
*
* @param int $privPackageID
* @access public
* @return void
*/
public function deletePrivPackage($privPackageID, $confirm = 'no')
{
if($confirm == 'no')
{
return print(js::confirm($this->lang->group->confirmDeleteAB, $this->createLink('group', 'deletePrivPackage', "privPackageID=$privPackageID&confirm=yes")));
}
else
{
$privPackage = $this->group->getPrivPackageByID($privPackageID);
$this->group->deletePrivPackage($privPackageID);
if(!dao::isError()) $this->loadModel('action')->create('privpackage', $privPackageID, 'deleted', '', zget($privPackage, 'name'));
return print(js::reload('parent'));
}
}
/**
* Add recommendation.
*
* @param string $privIdList
* @param string $type depend|recommend
* @access public
* @return void
*/
public function addRelation($privIdList, $type)
{
if(strpos("depend|recommend", $type) === false) return print('Error type');
if($this->server->request_method == 'POST')
{
if(empty($_POST['relation'])) return print(js::alert($this->lang->group->noticeNoChecked));
$this->group->saveRelation($privIdList, $type);
if(strpos($privIdList, ',') === false) print(js::execute("if(typeof(parent.parent.getSideRelation) == 'function') parent.parent.getSideRelation({$privIdList})"));
return print(js::reload('parent'));
}
$privs = $this->group->getPrivByIdList($privIdList);
$modules = array();
foreach($privs as $priv) $modules[$priv->module] = $priv->module;
$modulePrivs = $this->group->getPrivByModule($modules);
$packageIdList = array();
foreach($modulePrivs as $packagePrivs) $packageIdList = array_unique(array_merge($packageIdList, array_keys($packagePrivs)));
$this->view->privs = $privs;
$this->view->modules = array('' => $this->lang->group->selectModule) + $this->group->getMenuModules(null, true);
$this->view->packages = $this->group->getPackagePairs($packageIdList);
$this->view->modulePrivs = $modulePrivs;
$this->view->type = $type;
$this->display();
}
/**
* Delete relation.
*
* @param string $type recommend|depend
* @param int $privID
* @param int $relationPriv
* @access public
* @return void
*/
public function deleteRelation($type, $privID, $relationPriv)
{
$this->dao->delete()->from(TABLE_PRIVRELATION)->where('type')->eq($type)->andWhere('priv')->eq($privID)->andWhere('relationPriv')->eq($relationPriv)->exec();
}
/**
* Batch delete relation.
*
* @param string $privIdList
* @param string $type recommend|depend
* @access public
* @return void
*/
public function batchDeleteRelation($privIdList, $type)
{
if(strpos("depend|recommend", $type) === false) return print('Error type');
if($this->server->request_method == 'POST')
{
if(empty($_POST['relation'])) return print(js::alert($this->lang->group->noticeNoChecked));
$data = fixer::input('post')->get();
$deletedPriv = array();
foreach($data->relation as $module => $relations) $deletedPriv = array_merge($deletedPriv, $relations);
$this->dao->delete()->from(TABLE_PRIVRELATION)->where('type')->eq($type)->andWhere('priv')->in($privIdList)->andWhere('relationPriv')->in($deletedPriv)->exec();
return print(js::reload('parent'));
}
$privs = $this->group->getPrivByIdList($privIdList);
$modules = array();
foreach($privs as $priv) $modules[$priv->module] = $priv->module;
$modulePrivs = $this->group->getPrivByModule($modules);
$packageIdList = array();
foreach($modulePrivs as $packagePrivs) $packageIdList = array_unique(array_merge($packageIdList, array_keys($packagePrivs)));
$this->view->privs = $privs;
$this->view->modules = array('' => $this->lang->group->selectModule) + $this->group->getMenuModules(null, true);
$this->view->packages = $this->group->getPackagePairs($packageIdList);
$this->view->modulePrivs = $modulePrivs;
$this->view->type = $type;
$this->display('group', 'addrelation');
}
/**
* Ajax get priv tree.
*
* @param string $privIdList
* @param string $module
* @param string $type recommend|depend
* @access public
* @return void
*/
public function ajaxGetPrivTree($privIdList, $module, $type = 'recommend')
{
if(is_string($privIdList)) $privIdList = explode(',', $privIdList);
$modulePrivs = $this->group->getPrivByModule($module);
$packageIdList = array();
foreach($modulePrivs as $packagePrivs) $packageIdList = array_unique(array_merge($packageIdList, array_keys($packagePrivs)));
$modules = $this->group->getMenuModules(null, true);
$packages = $this->group->getPackagePairs($packageIdList);
$tree = "<ul class='tree' data-ride='tree'><li>";
$tree .= html::a('#', $modules[$module]);
$tree .= "<ul class='relationBox'>";
foreach($packages as $packageID => $packageName)
{
if(empty($modulePrivs[$module][$packageID])) continue;
$tree .= "<li class='clearleft'>";
$tree .= html::a('#', $packageName);
$tree .= '<ul>';
foreach($modulePrivs[$module][$packageID] as $id => $modulePriv)
{
$tree .= '<li>';
$tree .= html::checkbox("relation[$module]", array($id => $modulePriv->name), '');
$tree .= '</li>';
}
$tree .= '</ul></li>';
unset($modulePrivs[$module][$packageID]);
}
if(!empty($modulePrivs[$module]))
{
$tree .= "<li class='clearleft'>";
$tree .= html::a('#', $this->lang->group->unassigned);
$tree .= '<ul>';
foreach($modulePrivs[$module] as $packageID => $packagePrivs)
{
foreach($packagePrivs as $id => $modulePriv)
{
$tree .= '<li>';
$tree .= html::checkbox("relation[$module]", array($id => $modulePriv->name), '');
$tree .= '</li>';
}
}
$tree .= '</ul></li>';
}
$tree .= '</ul></li></ul>';
return print($tree);
}
/**
* Create a priv.
*
* @access public
* @return void
*/
public function createPriv()
{
if(!empty($_POST))
{
$packageID = $this->group->createPriv();
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
}
$views = $this->loadModel('setting')->getItem("owner=system&module=priv&key=views");
$views = explode(',', $views);
$moduleLang = $this->group->getMenuModules('', true);
foreach($views as $index => $view)
{
$views[$view] = isset($this->lang->{$view}->common) ? $this->lang->{$view}->common : zget($moduleLang, $view);
unset($views[$index]);
}
$this->view->title = $this->lang->group->createPriv;
$this->view->views = $views;
$this->view->modules = $this->group->getPrivModules('', 'noViewName');
$this->view->packages = $this->group->getPrivPackagePairs();
$this->view->moduleViewPairs = $this->group->getPrivModuleViewPairs();
$this->view->packageModulePairs = $this->group->getPrivPackagePairs('', '', 'module');
$this->display();
}
/**
* Edit a priv.
*
* @param int $privID
* @access public
* @return void
**/
public function editPriv($privID)
{
$privID = intval($privID);
$priv = $this->group->getPrivByID($privID);
if(!$priv)
{
return print(js::alert($this->lang->group->noneProject));
}
if(!empty($_POST))
{
$currentLang = $this->app->clientLang ? : 'zh-cn';
$changes = $this->group->updatePriv($privID, $currentLang);
if($changes)
{
$actionID = $this->loadModel('action')->create('privlang', $privID, 'Edited');
$this->action->logHistory($actionID, $changes);
}
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'load' => true, 'closeModal' => true));
$this->send(array('result' => $responseResult, 'message' => $responseMessage, 'load' => $locate));
}
$views = $this->loadModel('setting')->getItem("owner=system&module=priv&key=views");
$views = explode(',', $views);
$moduleLang = $this->group->getMenuModules('', true);
foreach($views as $index => $view)
{
$views[$view] = isset($this->lang->{$view}->common) ? $this->lang->{$view}->common : zget($moduleLang, $view);
unset($views[$index]);
}
$moduleViewPairs = $this->group->getPrivModuleViewPairs();
$priv->view = zget($moduleViewPairs, $priv->module, '');
$this->view->title = $this->lang->group->editPriv;
$this->view->views = $views;
$this->view->modules = $this->group->getPrivModules($priv->view, 'noViewName');
$this->view->packages = $this->group->getPrivPackagePairs($priv->view, $priv->module);
$this->view->moduleViewPairs = $moduleViewPairs;
$this->view->packageModulePairs = $this->group->getPrivPackagePairs('', '', 'module');
$this->view->priv = $priv;
$this->view->actions = $this->loadModel('action')->getList('privlang', $privID);
$this->view->users = $this->loadModel('user')->getPairs();
$this->display();
}
/**
* Delete a priv.
*
* @param int $privID
* @access public
* @return void
*/
public function deletePriv($privID, $confirm = 'no')
{
if($confirm == 'no')
{
return print(js::confirm($this->lang->group->confirmDeleteAB, $this->createLink('group', 'deletePriv', "privID=$privID&confirm=yes")));
}
else
{
$priv = $this->group->getPrivByID($privID);
$this->group->deletePriv($privID);
if(!dao::isError()) $this->loadModel('action')->create('privlang', $privID, 'deleted', '', "$priv->moduleName-$priv->methodName");
return print(js::reload('parent'));
}
}
/**
* Ajax get priv modules by view.
*
* @param string $viewName
* @access public
* @return string
*/
public function ajaxGetPrivModules($viewName = '')
{
$modules = $this->group->getPrivModules($viewName, 'noViewName');
echo html::select('module', array('' => '') + $modules, '', "class='form-control picker-select' onchange='loadPackages(this.value, \"module\")'");
}
/**
* Ajax get priv packages by view or module.
*
* @param string $object
* @param string $type
* @access public
* @return string
*/
public function ajaxGetPrivPackages($object = '', $type = 'view')
{
$packages = array();
if($type == 'view') $packages = $this->group->getPrivPackagePairs($object);
if($type == 'module') $packages = $this->group->getPrivPackagePairs('', $object);
echo html::select('package', array('' => '') + $packages, '', "class='form-control picker-select' onchange='changeViewAndModule(this.value)'");
}
/**
* AJAX: Get priv's related priv list.
*
* @param int $privID
* @access public
* @return bool
*/
public function ajaxGetPrivRelations($privID)
{
$relatedPrivs = $this->group->getPrivRelation($privID);
if(empty($relatedPrivs)) return print('');
$moduleLang = $this->group->getMenuModules('', true);
$privList = array('depend' => array(), 'recommend' => array());
foreach($relatedPrivs as $type => $relations)
{
foreach($relations as $relatedPriv)
{
$module = $relatedPriv->module;
if(!isset($privList[$type][$module])) $privList[$type][$module] = array();
$privList[$type][$module]['text'] = zget($moduleLang, $module, $module);
$privList[$type][$module]['module'] = $relatedPriv->module;
$privList[$type][$module]['children'][] = array('text' => $relatedPriv->name, 'relationPriv' => $relatedPriv->id, 'privID' => $privID);
}
$privList[$type] = array_values($privList[$type]);
}
return print(json_encode($privList));
}
/**
* AJAX: update priv order.
*
* @access public
* @return void
*/
public function ajaxUpdatePrivOrder()
{
if(!empty($_POST)) $this->group->updatePrivOrder();
}
/**
* AJAX: Get privs by parents.
*
@@ -921,7 +324,7 @@ class group extends control
* @access public
* @return bool
*/
public function ajaxGetPrivByParents($selectedSubset, $selectedPackages)
public function ajaxGetPrivByParents(string $selectedSubset, string $selectedPackages)
{
$privs = $this->group->getPrivByParents($selectedSubset, $selectedPackages);
+1 -1
View File
@@ -20,7 +20,7 @@ $lang->group->manageView = 'Anzeigen';
$lang->group->managePriv = 'Assign Privileges';
$lang->group->managePrivByGroup = 'Assign Privileges by Group';
$lang->group->managePrivByModule = 'Modul Rechte';
$lang->group->byModuleTips = '<span class="tips">(SHIFT/STRG für Multi-Select)</span>';
$lang->group->byModuleTips = '(SHIFT/STRG für Multi-Select)';
$lang->group->allTips = 'After checking this option, the administrator can manage all objects in the system, including objects created later.';
$lang->group->manageMember = 'Mitglieder';
$lang->group->manageProjectAdmin = "Manage {$lang->projectCommon} Admins";
+1 -1
View File
@@ -20,7 +20,7 @@ $lang->group->manageView = 'Manage Sight';
$lang->group->managePriv = 'Assign Privileges';
$lang->group->managePrivByGroup = 'Assign Privileges by Group';
$lang->group->managePrivByModule = 'Manage Privileges by Module';
$lang->group->byModuleTips = '<span class="tips">(Press Shift/Ctrl to Multi-select)</span>';
$lang->group->byModuleTips = '(Press Shift/Ctrl to Multi-select)';
$lang->group->allTips = 'After checking this option, the administrator can manage all objects in the system, including objects created later.';
$lang->group->manageMember = 'Manage Members';
$lang->group->manageProjectAdmin = "Manage {$lang->projectCommon} Admins";
+1 -1
View File
@@ -20,7 +20,7 @@ $lang->group->manageView = 'Gérer droits consultation';
$lang->group->managePriv = 'Assign Privileges';
$lang->group->managePrivByGroup = 'Assign Privileges by Group';
$lang->group->managePrivByModule = 'Gérer Privilèges par Module';
$lang->group->byModuleTips = '<span class="tips">(Shift/Ctrl pour sélection multiple)</span>';
$lang->group->byModuleTips = '(Shift/Ctrl pour sélection multiple)';
$lang->group->allTips = 'After checking this option, the administrator can manage all objects in the system, including objects created later.';
$lang->group->manageMember = 'Gérer Membres';
$lang->group->manageProjectAdmin = "Manage {$lang->projectCommon} Admins";
+1 -1
View File
@@ -19,7 +19,7 @@ $lang->group->manageView = 'Quản lý Sight';
$lang->group->managePriv = 'Quản lý Privileges';
$lang->group->managePrivByGroup = 'Quản lý Privileges by Group';
$lang->group->managePrivByModule = 'Quản lý Privileges by Module';
$lang->group->byModuleTips = '<span class="tips">(Press Shift/Ctrl to Multi-select)</span>';
$lang->group->byModuleTips = '(Press Shift/Ctrl to Multi-select)';
$lang->group->manageMember = 'Quản lý Members';
$lang->group->manageProjectAdmin = 'Manage Program Admins';
$lang->group->editManagePriv = 'Permission Edit';
+1 -1
View File
@@ -20,7 +20,7 @@ $lang->group->manageView = '视野维护';
$lang->group->managePriv = '分配权限';
$lang->group->managePrivByGroup = '分配权限';
$lang->group->managePrivByModule = '按模块分配权限';
$lang->group->byModuleTips = '<span class="tips">(可以按住Shift或者Ctrl键进行多选)</span>';
$lang->group->byModuleTips = '(可以按住Shift或者Ctrl键进行多选)';
$lang->group->allTips = '勾选此项后,管理员可管理系统中所有对象,包括后续创建的对象。';
$lang->group->manageMember = '成员维护';
$lang->group->manageProjectAdmin = "维护{$lang->projectCommon}管理员";
+1 -1
View File
@@ -19,7 +19,7 @@ $lang->group->manageView = '視野維護';
$lang->group->managePriv = '權限維護';
$lang->group->managePrivByGroup = '權限維護';
$lang->group->managePrivByModule = '按模組分配權限';
$lang->group->byModuleTips = '<span class="tips">(可以按住Shift或者Ctrl鍵進行多選)</span>';
$lang->group->byModuleTips = '(可以按住Shift或者Ctrl鍵進行多選)';
$lang->group->manageMember = '成員維護';
$lang->group->manageProjectAdmin = '維護項目管理員';
$lang->group->confirmDelete = '您確定刪除該用戶分組嗎?';
+36 -1611
View File
File diff suppressed because it is too large Load Diff
+9 -128
View File
@@ -180,22 +180,6 @@ class groupTest
return $objects;
}
/**
* Get groups by accounts.
*
* @param array $accounts
* @access public
* @return array
*/
public function getByAccountsTest($accounts)
{
$objects = $this->objectModel->getByAccounts($accounts);
if(dao::isError()) return dao::getError();
return $objects;
}
/**
* Get the account number in the group.
*
@@ -245,47 +229,30 @@ class groupTest
}
/**
* Get user programs of a group.
* 测试getAdmins方法。
* Test getAdmins method.
*
* @param int $groupID
* @param array $idList
* @param string $field
* @access public
* @return array
*/
public function getUserProgramsTest($groupID)
public function getAdminsTest(array $idList, string $field = 'programs'): array
{
$objects = $this->objectModel->getUserPrograms($groupID);
if(dao::isError()) return dao::getError();
return $objects;
return $this->objectModel->getAdmins($idList, $field);
}
/**
* Get the ID of the group that has access to the program.
*
* @access public
* @return array
*/
public function getAccessProgramGroupTest()
{
$objects = $this->objectModel->getAccessProgramGroup();
if(dao::isError()) return dao::getError();
return $objects;
}
/**
* Delete a group.
* Remove a group.
*
* @param int $groupID
* @param null $null compatible with that of model::delete()
* @access public
* @return void
*/
public function deleteTest($groupID, $null = null)
public function removeTest($groupID)
{
$this->objectModel->delete($groupID, $null = null);
$this->objectModel->remove($groupID);
if(dao::isError()) return dao::getError();
@@ -369,90 +336,4 @@ class groupTest
return $objects;
}
/**
* Check menu have module
*
* @param string $menu
* @param string $moduleName
* @access public
* @return void
*/
public function checkMenuModuleTest($menu, $moduleName)
{
$objects = $this->objectModel->checkMenuModule($menu, $moduleName);
if(dao::isError()) return dao::getError();
return $objects;
}
/**
* Get modules in menu
*
* @param string $menu
* @access public
* @return void
*/
public function getMenuModulesTest($menu)
{
$objects = $this->objectModel->getMenuModules($menu);
if(dao::isError()) return dao::getError();
return $objects;
}
/**
* 获取一条权限的基本信息
*
* @param int $privID
* @param string $lang
* @access public
* @return void
*/
public function getPrivInfoTest($priv, $lang)
{
$object = $this->objectModel->getPrivInfo($priv, $lang);
if(dao::isError()) return dao::getError();
return $object;
}
/**
* 获取模块和权限包option
*
* @access public
* @return array
*/
public function getModuleAndPackageTreeTest()
{
return $this->objectModel->getModuleAndPackageTree();
}
/**
* 更新权限
*
* @access public
* @return void
*/
public function updatePrivTest($privID, $lang)
{
$this->objectModel->updatePrivLang($privID,$lang);
if(dao::isError()) return false;
return true;
}
/**
* 测试getAdmins方法。
* Test getAdmins method.
*
* @param array $idList
* @param string $field
* @access public
* @return array
*/
public function getAdminsTest(array $idList, string $field = 'programs'): array
{
return $this->objectModel->getAdmins($idList, $field);
}
}
@@ -1,20 +0,0 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/group.class.php';
su('admin');
/**
title=测试groupModel->getModuleAndPackageTree();
cid=1
pid=1
*/
$group = new groupTest();
var_dump($group->getModuleAndPackageTreeTest());
r($group->getModuleAndPackageTreeTest()) && p() && e("获取数据");
@@ -1,21 +0,0 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/group.class.php';
su('admin');
/**
title=测试 groupModel->checkMenuModule();
cid=1
pid=1
*/
$group = new groupTest();
r($group->checkMenuModuleTest('','index')) && p('') && e(1); // 测试获取 '','index' 的返回结果
r($group->checkMenuModuleTest('my','tree')) && p('') && e(''); // 测试获取 'my','tree' 的返回结果
r($group->checkMenuModuleTest('none','tree')) && p('') && e(''); // 测试获取 'none','tree' 的返回结果
-22
View File
@@ -1,22 +0,0 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/group.class.php';
/**
*
* title = 测试 groupModel->getPrivInfo();
*
* cid=1
* pid=1
*
*/
$group = new groupTest();
$_POST['name'] = '修改test';
$_POST['desc'] = '描述描述描述';
$_POST['module'] = 'webhook';
r($group->updatePrivTest(3324,'zh-cn')) && p('priv') && e("这是获取到的一条权限");
//测试获取 id为3324的权限信息
@@ -1,20 +0,0 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/group.class.php';
su('admin');
/**
title=测试 groupModel->getAccessProgramGroup();
cid=1
pid=1
测试获取group中用户个数 >> 14
*/
$group = new groupTest();
$AccessProgramGroup = $group->getAccessProgramGroupTest();
r(count($AccessProgramGroup)) && p('') && e('14'); //测试获取group中用户个数
-43
View File
@@ -1,43 +0,0 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/group.class.php';
su('admin');
/**
title=测试 groupModel->getByAccounts();
cid=1
pid=1
测试获取用户 outside3 的权限分组信息 >> outside3
测试获取用户 top2 的权限分组信息 >> top2
测试获取用户 pd2 的权限分组信息 >> pd2
测试获取用户 td1 的权限分组信息 >> td1
测试获取用户 pm1 的权限分组信息 >> pm1
测试获取用户 po48 的权限分组信息 >> po48
测试获取用户 dev100 的权限分组信息 >> dev100
测试获取用户 test2 的权限分组信息 >> test2
*/
$accountList = array();
$accountList[0] = array('outside3', 'top2');
$accountList[1] = array('td1', 'pd2');
$accountList[2] = array('po48', 'pm1');
$accountList[3] = array('dev100', 'test2');
$group = new groupTest();
$groups0 = $group->getByAccountsTest($accountList[0]);
$groups1 = $group->getByAccountsTest($accountList[1]);
$groups2 = $group->getByAccountsTest($accountList[2]);
$groups3 = $group->getByAccountsTest($accountList[3]);
r($groups0['outside3']) && p('0:account') && e('outside3'); //测试获取用户 outside3 的权限分组信息
r($groups0['top2']) && p('0:account') && e('top2'); //测试获取用户 top2 的权限分组信息
r($groups1['pd2']) && p('0:account') && e('pd2'); //测试获取用户 pd2 的权限分组信息
r($groups1['td1']) && p('0:account') && e('td1'); //测试获取用户 td1 的权限分组信息
r($groups2['pm1']) && p('0:account') && e('pm1'); //测试获取用户 pm1 的权限分组信息
r($groups2['po48']) && p('0:account') && e('po48'); //测试获取用户 po48 的权限分组信息
r($groups3['dev100']) && p('0:account') && e('dev100'); //测试获取用户 dev100 的权限分组信息
r($groups3['test2']) && p('0:account') && e('test2'); //测试获取用户 test2 的权限分组信息
@@ -1,25 +0,0 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/group.class.php';
su('admin');
/**
title=测试 groupModel->getMenuModules();
cid=1
pid=1
测试查询 product 菜单的模块 >> product,branch,story
测试查询 my 菜单的模块 >> my,todo
测试查询 qa 菜单的模块 >> qa,bug,caselib
测试查询 project 菜单的模块 >> design,projectbuild,projectstory
*/
$group = new groupTest();
r($group->getMenuModulesTest('product')) && p('0,1,2') && e('product,branch,story'); // 测试查询 product 菜单的模块
r($group->getMenuModulesTest('my')) && p('0,1') && e('my,todo'); // 测试查询 my 菜单的模块
r($group->getMenuModulesTest('qa')) && p('0,1,6') && e('qa,bug,caselib'); // 测试查询 qa 菜单的模块
r($group->getMenuModulesTest('project')) && p('0,3,4') && e('design,projectbuild,projectstory'); // 测试查询 project 菜单的模块
-20
View File
@@ -1,20 +0,0 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/group.class.php';
/**
*
* title = 测试 groupModel->getPrivInfo();
*
* cid=1
* pid=1
*
*/
$group = new groupTest();
r($group->getPrivInfoTest(3324,'zh-cn')) && p('priv') && e("这是获取到的一条权限");
//测试获取 id为3324的权限信息
@@ -1,27 +0,0 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/group.class.php';
su('admin');
/**
title=测试 groupModel->getUserPrograms();
cid=1
pid=1
*/
$groupList = array(1,2,3,4,5);
$userIDList = array('td81','dev100','pd10','td50','td64');
$resultList = array(74,29,13,43,57);
$group = new groupTest();
r($group->getUserProgramsTest($groupList[0])) && p($userIDList[0]) && e(74); //检查权限分组 1 的用户项目信息
r($group->getUserProgramsTest($groupList[1])) && p($userIDList[1]) && e(29); //检查权限分组 2 的用户项目信息
r($group->getUserProgramsTest($groupList[2])) && p($userIDList[2]) && e(13); //检查权限分组 3 的用户项目信息
r($group->getUserProgramsTest($groupList[3])) && p($userIDList[3]) && e(43); //检查权限分组 4 的用户项目信息
r($group->getUserProgramsTest($groupList[4])) && p($userIDList[4]) && e(57); //检查权限分组 5 的用户项目信息
+81
View File
@@ -11,6 +11,86 @@ declare(strict_types=1);
*/
class groupZen extends group
{
/**
* 有些权限在resource里添加了,但没有在packagemanager里同步更新,需要追加上
* Append packages in resource.
*
* @access public
* @return void
*/
public function appendResourcePackages()
{
$allPrivs = array();
foreach($this->config->group->package as $packageCode => $package)
{
if(empty($package->privs)) continue;
foreach($package->privs as $privCode => $priv)
{
$allPrivs[$privCode] = $privCode;
}
}
/* Privs in resource but not in package. */
foreach($this->lang->resource as $module => $methodList)
{
foreach($methodList as $method => $methodLang)
{
if(isset($allPrivs[$module . '-' . $method])) continue;
/* Create subset. */
if(!isset($this->config->group->subset->$module))
{
$this->config->group->subset->$module = new stdclass();
$this->config->group->subset->$module->order = 10000;
$this->config->group->subset->$module->nav = $module;
}
/* Create subset. */
$methodPackage = array('create' => 'manage', 'batchcreate' => 'manage', 'browse' => 'browse', 'view' => 'browse', 'delete' => 'delete', 'batchdelete' => 'delete', 'edit' => 'manage', 'batchedit' => 'manage');
$packageName = isset($methodPackage[$method]) ? $methodPackage[$method] : 'other';
$packageCode = $module . $packageName;
if(!isset($this->config->group->package->$packageCode))
{
$this->config->group->package->$packageCode = new stdclass();
$this->config->group->package->$packageCode->order = 5;
$this->config->group->package->$packageCode->subset = $module;
$this->config->group->package->$packageCode->privs = array();
$this->lang->group->package->$packageCode = $this->lang->group->package->$packageName;
}
$this->appendWorkflowMenu($packageCode, $module, $method);
}
}
}
/**
* 工作流列表页面的菜单也需要拆分不同的权限,比如全部、未关闭、已完成
* Append priv to package of workflow browse menu.
*
* @param string $packageCode
* @param string $module
* @param string $method
* @access protected
* @return mixed
*/
protected function appendWorkflowMenu(string $packageCode, string $module, string $method)
{
/* Browse action in workflow. */
if(isset($this->lang->$module->menus) && $method == 'browse')
{
$this->config->group->package->$packageCode->privs["$module-$method"] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,or', 'order' => 5, 'depend' => array(), 'recommend' => array());
foreach($this->lang->$module->menus as $flowMethod => $flowName)
{
$this->config->group->package->$packageCode->privs["$module-$flowMethod"] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,or', 'order' => 5, 'depend' => array("$module-$method"), 'recommend' => array());
}
}
else
{
$this->config->group->package->$packageCode->privs["$module-$method"] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,or', 'order' => 5, 'depend' => array(), 'recommend' => array());
}
}
/**
* Manage priv by package or group.
*
@@ -117,6 +197,7 @@ class groupZen extends group
/* Subsets in package. */
foreach($this->config->group->package as $packageCode => $packageData)
{
if(!isset($packageData->privs)) continue;
foreach($packageData->privs as $privCode => $priv)
{
list($moduleName, $methodName) = explode('-', $privCode);