From 378fb4f83935be7622918f5e03df9d86d5de75a2 Mon Sep 17 00:00:00 2001 From: hufangzhou Date: Thu, 9 Mar 2023 07:17:42 +0000 Subject: [PATCH] * Code for task #86260. --- module/group/control.php | 71 ++++++++++++++++++- module/group/js/editmanagepriv.js | 13 +++- module/group/lang/de.php | 33 ++++----- module/group/lang/en.php | 33 ++++----- module/group/lang/fr.php | 33 ++++----- module/group/lang/zh-cn.php | 39 +++++----- module/group/model.php | 52 ++++++++++++-- module/group/view/editmanagepriv.html.php | 2 +- .../group/view/editmanageprivbycard.html.php | 45 +++--------- 9 files changed, 210 insertions(+), 111 deletions(-) diff --git a/module/group/control.php b/module/group/control.php index 0b7a5f98a4..6fcbe5369b 100644 --- a/module/group/control.php +++ b/module/group/control.php @@ -382,7 +382,7 @@ class group extends control } /** - * edit manage priv. + * Edit manage priv. * * @param string $browseType * @param string $view @@ -407,11 +407,37 @@ class group extends control $actionURL = $this->createLink('group', 'editManagePriv', "browseType=bysearch&view=¶mID=myQueryID&recTotal=$recTotal&recPerPage=$recPerPage"); $this->group->buildPrivSearchForm($queryID, $actionURL); + $moduleLang = $this->group->getMenuModules('', true); + + if($browseType == 'bycard') + { + $moduleList = $this->loadModel('setting')->getItem("owner=system&module=priv§ion=&key={$view}Modules"); + $privGroup = $this->group->getPrivGroup($moduleList); + $privPackages = $this->group->getPrivPackagePairs(); + $privLang = $this->group->getPrivLangPairs(); + + $privList = array(); + foreach($privGroup as $module => $privs) + { + if(!isset($privList[$module])) $privList[$module] = array(); + foreach($privs as $priv) + { + if(!isset($privList[$module][$priv->package])) $privList[$module][$priv->package] = array(); + $privList[$module][$priv->package][$priv->id] = $priv; + } + } + + $this->view->privLang = $privLang; + $this->view->privPackages = $privPackages; + } + $this->view->title = $this->lang->group->editManagePriv; $this->view->browseType = $browseType; $this->view->privList = $privList; $this->view->packages = $this->group->getPrivPackagesByView($view); + $this->view->moduleLang = $moduleLang; $this->view->pager = $pager; + $this->display(); } @@ -583,6 +609,7 @@ class group extends control } } } + /** * * edit priv @@ -621,4 +648,46 @@ class group extends control $this->display(); } } + + /** + * Add dependent privs. + * + * @access public + * @return void + */ + public function addDependent() + { + $this->display(); + } + + /** + * AJAX: Get priv's related priv list. + * + * @param int $privID + * @param string $type + * @access public + * @return bool + */ + public function ajaxGetPrivRelations($privID, $type = 'depend') + { + $moduleLang = $this->group->getMenuModules('', true); + $relatedPrivs = $this->group->getPrivRelation($privID); + + if(empty($relatedPrivs)) return print(''); + + $privList = array(); + foreach($relatedPrivs as $relatedPrivID => $relatedPriv) + { + if(!isset($privList[$relatedPriv->type])) $privList[$relatedPriv->type] = array(); + if(!isset($privList[$relatedPriv->type][$relatedPriv->module])) $privList[$relatedPriv->type][$relatedPriv->module] = array(); + $privList[$relatedPriv->type][$relatedPriv->module]['title'] = zget($moduleLang, $relatedPriv->module, $relatedPriv->module); + $privList[$relatedPriv->type][$relatedPriv->module]['module'] = $relatedPriv->module; + $privList[$relatedPriv->type][$relatedPriv->module]['children'][] = array('title' => $relatedPriv->name); + } + + $privList['depend'] = array_values($privList['depend']); + $privList['recommend'] = array_values($privList['recommend']); + + return print(json_encode($privList)); + } } diff --git a/module/group/js/editmanagepriv.js b/module/group/js/editmanagepriv.js index 7234ab73dc..d0193e7c8a 100644 --- a/module/group/js/editmanagepriv.js +++ b/module/group/js/editmanagepriv.js @@ -70,13 +70,22 @@ $(function() $.cookie('managePrivEditType', $(this).data('type'), {expires: config.cookieLife, path: config.webRoot}); location.href = location.href; }); + $('.permission-row .checkbox-primary').on('click', 'input', function(e) { console.log($(e.target).attr('type')); }).on('click', 'label', function(e) { - if($(e.target).prop('tagName') == 'LABEL'); - console.log('label'); + if($(e.target).prop('tagName') == 'LABEL') + { + var selectedID = $(this).siblings('input:checkbox').data('id'); + $.get(createLink('group', 'ajaxGetPrivRelations', "privID=" + selectedID), function(data) + { + var relatedPriv = JSON.parse(data); + var dependData = relatedPriv.depend; + var recommendData = relatedPriv.recommend; + }) + } }); }); diff --git a/module/group/lang/de.php b/module/group/lang/de.php index f67ff53f3c..aa380f4e3e 100644 --- a/module/group/lang/de.php +++ b/module/group/lang/de.php @@ -65,22 +65,23 @@ $lang->group->addRecommendation = 'Add Recommendation'; $lang->group->selectedPrivs = 'Selected Privilege: %s'; $lang->group->selectModule = 'Select Module'; -$lang->group->id = 'ID'; -$lang->group->name = 'Name'; -$lang->group->desc = 'Beschreibung'; -$lang->group->role = 'Rolle'; -$lang->group->acl = 'Rechte'; -$lang->group->users = 'Benutzer'; -$lang->group->module = 'Module'; -$lang->group->method = 'Methoden'; -$lang->group->priv = 'Gruppe'; -$lang->group->option = 'Option'; -$lang->group->inside = 'Gruppenbenutzer'; -$lang->group->outside = 'Andere Benutzer'; -$lang->group->limited = 'Limited Users'; -$lang->group->other = 'Andere'; -$lang->group->all = 'Alle'; -$lang->group->config = 'Config'; +$lang->group->id = 'ID'; +$lang->group->name = 'Name'; +$lang->group->desc = 'Beschreibung'; +$lang->group->role = 'Rolle'; +$lang->group->acl = 'Rechte'; +$lang->group->users = 'Benutzer'; +$lang->group->module = 'Module'; +$lang->group->method = 'Methoden'; +$lang->group->priv = 'Gruppe'; +$lang->group->option = 'Option'; +$lang->group->inside = 'Gruppenbenutzer'; +$lang->group->outside = 'Andere Benutzer'; +$lang->group->limited = 'Limited Users'; +$lang->group->other = 'Andere'; +$lang->group->all = 'Alle'; +$lang->group->config = 'Config'; +$lang->group->unassigned = 'Unassigned'; if(!isset($lang->privPackage)) $lang->privPackage = new stdclass(); $lang->privpackage->common = 'Priv Package'; diff --git a/module/group/lang/en.php b/module/group/lang/en.php index c2024c7d9b..49537dbce7 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -65,22 +65,23 @@ $lang->group->addRecommendation = 'Add Recommendation'; $lang->group->selectedPrivs = 'Selected Privilege: %s'; $lang->group->selectModule = 'Select Module'; -$lang->group->id = 'ID'; -$lang->group->name = 'Group'; -$lang->group->desc = 'Description'; -$lang->group->role = 'Role'; -$lang->group->acl = 'Right'; -$lang->group->users = 'Group Members'; -$lang->group->module = 'Module'; -$lang->group->method = 'Method'; -$lang->group->priv = 'Privilege Group'; -$lang->group->option = 'Option'; -$lang->group->inside = 'Group Users'; -$lang->group->outside = 'Other Users'; -$lang->group->limited = 'Limited Users'; -$lang->group->other = 'Others'; -$lang->group->all = 'All Privileges'; -$lang->group->config = 'Config'; +$lang->group->id = 'ID'; +$lang->group->name = 'Group'; +$lang->group->desc = 'Description'; +$lang->group->role = 'Role'; +$lang->group->acl = 'Right'; +$lang->group->users = 'Group Members'; +$lang->group->module = 'Module'; +$lang->group->method = 'Method'; +$lang->group->priv = 'Privilege Group'; +$lang->group->option = 'Option'; +$lang->group->inside = 'Group Users'; +$lang->group->outside = 'Other Users'; +$lang->group->limited = 'Limited Users'; +$lang->group->other = 'Others'; +$lang->group->all = 'All Privileges'; +$lang->group->config = 'Config'; +$lang->group->unassigned = 'Unassigned'; if(!isset($lang->privpackage)) $lang->privpackage = new stdclass(); $lang->privpackage->common = 'Priv Package'; diff --git a/module/group/lang/fr.php b/module/group/lang/fr.php index fa9776dcf0..a7b87ebd51 100644 --- a/module/group/lang/fr.php +++ b/module/group/lang/fr.php @@ -65,22 +65,23 @@ $lang->group->addRecommendation = 'Add Recommendation'; $lang->group->selectedPrivs = 'Selected Privilege: %s'; $lang->group->selectModule = 'Select Module'; -$lang->group->id = 'ID'; -$lang->group->name = 'Groupe'; -$lang->group->desc = 'Description'; -$lang->group->role = 'Rôle'; -$lang->group->acl = 'Right'; -$lang->group->users = 'Membres Groupe'; -$lang->group->module = 'Module'; -$lang->group->method = 'Méthode'; -$lang->group->priv = 'Groupe de Privilèges'; -$lang->group->option = 'Option'; -$lang->group->inside = "Groupe d'utilisateurs"; -$lang->group->outside = 'Autres utilisateurs'; -$lang->group->limited = 'Limited Users'; -$lang->group->other = 'Autres'; -$lang->group->all = 'Tous les Privilèges'; -$lang->group->config = 'Config'; +$lang->group->id = 'ID'; +$lang->group->name = 'Groupe'; +$lang->group->desc = 'Description'; +$lang->group->role = 'Rôle'; +$lang->group->acl = 'Right'; +$lang->group->users = 'Membres Groupe'; +$lang->group->module = 'Module'; +$lang->group->method = 'Méthode'; +$lang->group->priv = 'Groupe de Privilèges'; +$lang->group->option = 'Option'; +$lang->group->inside = "Groupe d'utilisateurs"; +$lang->group->outside = 'Autres utilisateurs'; +$lang->group->limited = 'Limited Users'; +$lang->group->other = 'Autres'; +$lang->group->all = 'Tous les Privilèges'; +$lang->group->config = 'Config'; +$lang->group->unassigned = 'Unassigned'; if(!isset($lang->privpackage)) $lang->privpackage = new stdclass(); $lang->privpackage->common = 'Priv Package'; diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index d35a1cc8b3..a2f30591ae 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -51,9 +51,9 @@ $lang->group->noGroup = '暂时没有分组。'; $lang->group->repeat = "『%s』已经有『%s』这条记录了,请调整后再试。"; $lang->group->noneProject = '暂时没有项目'; $lang->group->addPriv = '新增权限'; -$lang->group->editPriv = '编辑权限'; -$lang->group->privName = '权限名称'; -$lang->group->privDesc = '描述'; +$lang->group->editPriv = '编辑权限'; +$lang->group->privName = '权限名称'; +$lang->group->privDesc = '描述'; $lang->group->add = '添加'; $lang->group->batchSetDependency = '批量设置依赖'; $lang->group->managePrivPackage = '维护权限包'; @@ -65,22 +65,23 @@ $lang->group->addRecommendation = '添加推荐'; $lang->group->selectedPrivs = '选中权限:%s'; $lang->group->selectModule = '选择模块'; -$lang->group->id = '编号'; -$lang->group->name = '分组名称'; -$lang->group->desc = '分组描述'; -$lang->group->role = '角色'; -$lang->group->acl = '权限'; -$lang->group->users = '用户列表'; -$lang->group->module = '模块'; -$lang->group->method = '方法'; -$lang->group->priv = '权限'; -$lang->group->option = '选项'; -$lang->group->inside = '组内用户'; -$lang->group->outside = '组外用户'; -$lang->group->limited = '受限用户组'; -$lang->group->other = '其他模块'; -$lang->group->all = '所有权限'; -$lang->group->config = '配置'; +$lang->group->id = '编号'; +$lang->group->name = '分组名称'; +$lang->group->desc = '分组描述'; +$lang->group->role = '角色'; +$lang->group->acl = '权限'; +$lang->group->users = '用户列表'; +$lang->group->module = '模块'; +$lang->group->method = '方法'; +$lang->group->priv = '权限'; +$lang->group->option = '选项'; +$lang->group->inside = '组内用户'; +$lang->group->outside = '组外用户'; +$lang->group->limited = '受限用户组'; +$lang->group->other = '其他模块'; +$lang->group->all = '所有权限'; +$lang->group->config = '配置'; +$lang->group->unassigned = '未分配'; if(!isset($lang->privpackage)) $lang->privpackage = new stdclass(); $lang->privpackage->common = '权限包'; diff --git a/module/group/model.php b/module/group/model.php index 115b54c400..205a6a6061 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -723,11 +723,12 @@ class groupModel extends model /** * Get modules in menu * - * @param string $menu + * @param string $menu + * @param bool $translateLang * @access public * @return array */ - public function getMenuModules($menu, $translateLang = false) + public function getMenuModules($menu = '', $translateLang = false) { $modules = array(); foreach($this->lang->resource as $moduleName => $action) @@ -842,6 +843,17 @@ class groupModel extends model return $this->dao->select('*')->from(TABLE_PRIVPACKAGE)->where('module')->eq($module)->orderBy('order_asc')->fetchAll('id'); } + /** + * Get all priv package pairs. + * + * @access public + * @return array + */ + public function getPrivPackagePairs() + { + return $this->dao->select('id,name')->from(TABLE_PRIVPACKAGE)->fetchPairs(); + } + /** * Get priv packages by view. * @@ -1113,12 +1125,13 @@ class groupModel extends model * @access public * @return array */ - public function getPrivRelation($priv, $type, $module = '') + public function getPrivRelation($priv, $type = '', $module = '') { - return $this->dao->select('t2.*')->from(TABLE_PRIVRELATION)->alias('t1') + return $this->dao->select('t1.type,t2.*,t3.name')->from(TABLE_PRIVRELATION)->alias('t1') ->leftJoin(TABLE_PRIV)->alias('t2')->on('t1.relationPriv=t2.id') + ->leftJoin(TABLE_PRIVLANG)->alias('t3')->on('t2.id=t3.priv') ->where('t1.priv')->eq($priv) - ->andWhere('t1.type')->eq($type) + ->beginIF(!empty($type))->andWhere('t1.type')->eq($type)->fi() ->beginIF($module)->andWhere('t2.module')->eq($module)->fi() ->fetchAll('id'); } @@ -1246,5 +1259,32 @@ class groupModel extends model $this->loadModel('search')->setSearchParams($this->config->group->priv->search); } -} + /** + * Get priv group by module. + * + * @param array $moduleList + * @access public + * @return array + */ + public function getPrivGroup($moduleList = array()) + { + return $this->dao->select('*')->from(TABLE_PRIV) + ->beginIF(!empty($moduleList))->where('module')->in($moduleList)->fi() + ->orderBy('order_asc') + ->fetchGroup('module'); + } + + /** + * Get all priv's lang pairs. + * + * @access public + * @return array + */ + public function getPrivLangPairs() + { + return $this->dao->select('priv,name')->from(TABLE_PRIVLANG) + ->where('lang')->eq($this->app->clientLang) + ->fetchPairs(); + } +} diff --git a/module/group/view/editmanagepriv.html.php b/module/group/view/editmanagepriv.html.php index d35956ce29..a088648a08 100644 --- a/module/group/view/editmanagepriv.html.php +++ b/module/group/view/editmanagepriv.html.php @@ -46,7 +46,7 @@
- ' . $lang->group->add, '', 'btn btn-primary');?> + inLink('addDependent'), $lang->group->add, '', "class='btn btn-primary'");?>
diff --git a/module/group/view/editmanageprivbycard.html.php b/module/group/view/editmanageprivbycard.html.php index 950bb72b4e..e85831289f 100644 --- a/module/group/view/editmanageprivbycard.html.php +++ b/module/group/view/editmanageprivbycard.html.php @@ -21,48 +21,25 @@ + $packages):?> - 首页 - 首页 - -
-
- - -
-
- - - - 地盘 - 地盘 + + $privs):?> + group->unassigned);?> + $priv):?>
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- - + methodName;?> + + $label), $action, "title='{$label}' id='actions[$module]$action' data-id='$privID'");?>
+ + +