From c64d1d411cf2182c65ce6c2b8ee6422f9c8e3b25 Mon Sep 17 00:00:00 2001 From: liumengyi Date: Fri, 10 Mar 2023 02:46:58 +0000 Subject: [PATCH] * Finish task #86271. --- module/group/config.php | 16 +++- module/group/lang/de.php | 2 +- module/group/lang/en.php | 2 +- module/group/lang/fr.php | 2 +- module/group/lang/zh-cn.php | 2 +- module/group/model.php | 80 ++++++++++++++++++- .../group/view/editmanageprivbylist.html.php | 8 ++ 7 files changed, 104 insertions(+), 8 deletions(-) diff --git a/module/group/config.php b/module/group/config.php index 7c5db1716d..0c031248bb 100644 --- a/module/group/config.php +++ b/module/group/config.php @@ -21,6 +21,18 @@ $config->privPackage->edit->requiredFields = 'name,module'; global $lang; $config->group->priv = new stdclass(); $config->group->priv->search['module'] = 'priv'; -$config->group->priv->search['fields']['name'] = $lang->group->name; -$config->group->priv->search['params']['name'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); +$config->group->priv->search['fields']['name'] = $lang->group->privName; +$config->group->priv->search['fields']['view'] = $lang->group->view; +$config->group->priv->search['fields']['module'] = $lang->group->module; +$config->group->priv->search['fields']['package'] = $lang->privpackage->belong; +$config->group->priv->search['fields']['recommendPrivs'] = $lang->group->recommendPrivs; +$config->group->priv->search['fields']['dependentPrivs'] = $lang->group->dependentPrivs; +$config->group->priv->search['fields']['desc'] = $lang->group->privDesc; +$config->group->priv->search['params']['name'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); +$config->group->priv->search['params']['view'] = array('operator' => '=', 'control' => 'select', 'values' => ''); +$config->group->priv->search['params']['module'] = array('operator' => '=', 'control' => 'select', 'values' => ''); +$config->group->priv->search['params']['package'] = array('operator' => '=', 'control' => 'select', 'values' => ''); +$config->group->priv->search['params']['recommendPrivs'] = array('operator' => 'include', 'control' => 'select', 'values' => ''); +$config->group->priv->search['params']['dependentPrivs'] = array('operator' => 'include', 'control' => 'select', 'values' => ''); +$config->group->priv->search['params']['desc'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); diff --git a/module/group/lang/de.php b/module/group/lang/de.php index 3e88cff8d3..e9549e5f3f 100644 --- a/module/group/lang/de.php +++ b/module/group/lang/de.php @@ -65,7 +65,7 @@ $lang->group->addRecommendation = 'Add Recommendation'; $lang->group->selectedPrivs = 'Selected Privilege: %s'; $lang->group->selectModule = 'Select Module'; $lang->group->recommendPrivs = 'Recommended Privs'; -$lang->group->DependentPrivs = 'Dependented Privs'; +$lang->group->dependentPrivs = 'Dependented Privs'; $lang->group->id = 'ID'; $lang->group->name = 'Name'; diff --git a/module/group/lang/en.php b/module/group/lang/en.php index 3d89cd4056..04ce460a69 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -65,7 +65,7 @@ $lang->group->addRecommendation = 'Add Recommendation'; $lang->group->selectedPrivs = 'Selected Privilege: %s'; $lang->group->selectModule = 'Select Module'; $lang->group->recommendPrivs = 'Recommended Privs'; -$lang->group->DependentPrivs = 'Dependented Privs'; +$lang->group->dependentPrivs = 'Dependented Privs'; $lang->group->id = 'ID'; $lang->group->name = 'Group'; diff --git a/module/group/lang/fr.php b/module/group/lang/fr.php index f39541c308..d75d5035f7 100644 --- a/module/group/lang/fr.php +++ b/module/group/lang/fr.php @@ -65,7 +65,7 @@ $lang->group->addRecommendation = 'Add Recommendation'; $lang->group->selectedPrivs = 'Selected Privilege: %s'; $lang->group->selectModule = 'Select Module'; $lang->group->recommendPrivs = 'Recommended Privs'; -$lang->group->DependentPrivs = 'Dependented Privs'; +$lang->group->dependentPrivs = 'Dependented Privs'; $lang->group->id = 'ID'; $lang->group->name = 'Groupe'; diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index 800c387e2c..ab60c59d4e 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -65,7 +65,7 @@ $lang->group->addRecommendation = '添加推荐'; $lang->group->selectedPrivs = '选中权限:%s'; $lang->group->selectModule = '选择模块'; $lang->group->recommendPrivs = '依赖权限'; -$lang->group->DependentPrivs = '推荐权限'; +$lang->group->dependentPrivs = '推荐权限'; $lang->group->id = '编号'; $lang->group->name = '分组名称'; diff --git a/module/group/model.php b/module/group/model.php index 3f77d01cfe..3d09749421 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -1148,12 +1148,57 @@ class groupModel extends model $privQuery = $this->session->privQuery; - return $this->dao->select('t1.*,t2.name,t2.desc')->from(TABLE_PRIV)->alias('t1') + $this->loadModel('setting'); + if(strpos($privQuery, '`view`') !== false) + { + preg_match_all("/`view`[^']+'([^']+)'/Ui", $privQuery, $out); + $privQuery = str_replace(array('`view` =', '`view` LIKE', '`view` =', '`view` !=', '`view` NOT LIKE'), array('`view` IN', '`view` IN', '`view` IN', '`view` NOT IN', '`view` NOT IN'), $privQuery); + foreach($out[1] as $view) + { + $view = str_replace('%', '', $view); + $modules = $this->setting->getItem("owner=system&module=priv&key={$view}Modules"); + $modules = str_replace(',', "','", $modules); + $privQuery = preg_replace("/`view`([^']+)'([%]?{$view}[%]?)'/Ui", "`module`$1('{$modules}')", $privQuery); + } + } + + if(strpos($privQuery, '`recommendPrivs`') !== false) + { + preg_match_all("/`recommendPrivs`[^']+'([^']+)'/Ui", $privQuery, $out); + $privQuery = str_replace(array('`recommendPrivs` =', '`recommendPrivs` LIKE', '`recommendPrivs` =', '`recommendPrivs` !=', '`recommendPrivs` NOT LIKE'), array('`recommendPrivs` IN', '`recommendPrivs` IN', '`recommendPrivs` IN', '`recommendPrivs` NOT IN', '`recommendPrivs` NOT IN'), $privQuery); + foreach($out[1] as $priv) + { + $priv = str_replace('%', '', $priv); + $privs = $this->dao->select('priv')->from(TABLE_PRIVRELATION)->where('relationPriv')->eq($priv)->andWhere('type')->eq('recommend')->fetchAll('priv'); + $privs = implode("','", $privs); + $privQuery = preg_replace("/`recommendPrivs`([^']+)'([%]?{$priv}[%]?)'/Ui", (!empty($privs) ? "`id`$1('{$privs}')" : '0=1'), $privQuery); + } + } + if(strpos($privQuery, '`dependentPrivs`') !== false) + { + preg_match_all("/`dependentPrivs`[^']+'([^']+)'/Ui", $privQuery, $out); + $privQuery = str_replace(array('`dependentPrivs` =', '`dependentPrivs` LIKE', '`dependentPrivs` =', '`dependentPrivs` !=', '`dependentPrivs` NOT LIKE'), array('`dependentPrivs` IN', '`dependentPrivs` IN', '`dependentPrivs` IN', '`dependentPrivs` NOT IN', '`dependentPrivs` NOT IN'), $privQuery); + foreach($out[1] as $priv) + { + $priv = str_replace('%', '', $priv); + $privs = $this->dao->select('priv')->from(TABLE_PRIVRELATION)->where('relationPriv')->eq($priv)->andWhere('type')->eq('dependent')->fetchAll('priv'); + $privs = implode(',', $privs); + $privQuery = preg_replace("/`dependentPrivs`([^']+)'([%]?{$priv}[%]?)'/Ui", (!empty($privs) ? "`id`$1('{$privs}')" : '0=1'), $privQuery); + } + } + + $views = empty($view) ? $this->setting->getItem("owner=system&module=priv&key=views") : $view; + $views = explode(',', $views); + $modules = ''; + foreach($views as $view) $modules .= ',' . $this->setting->getItem("owner=system&module=priv&key={$view}Modules"); + $modules = trim($modules, ','); + + return $this->dao->select("t1.*,t2.name,t2.desc, INSTR('$modules', `module`) as moduleOrder")->from(TABLE_PRIV)->alias('t1') ->leftJoin(TABLE_PRIVLANG)->alias('t2')->on('t1.id=t2.priv') ->where('1=1') ->andWhere($privQuery) ->andWhere('t2.lang')->eq($this->app->getClientLang()) - ->orderBy('`order`') + ->orderBy('`moduleOrder` asc, `order`') ->page($pager) ->fetchAll('id'); } @@ -1364,6 +1409,37 @@ class groupModel extends model $this->config->group->priv->search['actionURL'] = $actionURL; $this->config->group->priv->search['queryID'] = $queryID; + $this->loadModel('setting'); + + $views = $this->setting->getItem("owner=system&module=priv&key=views"); + $views = explode(',', $views); + foreach($views as $index => $view) + { + $views[$view] = $this->lang->{$view}->common; + unset($views[$index]); + } + + $modules = ''; + foreach(array_keys($views) as $view) $modules .= ',' . $this->setting->getItem("owner=system&module=priv&key={$view}Modules"); + $modules = trim($modules, ','); + $modules = explode(',', $modules); + $moduleLang = $this->getMenuModules('', true); + foreach($modules as $index => $module) + { + $modules[$module] = zget($moduleLang, $module); + unset($modules[$index]); + } + + $packages = $this->getPrivPackagesByView(''); + + $privs = $this->getPrivLangPairs(); + + $this->config->group->priv->search['params']['view']['values'] = array('' => '') + $views; + $this->config->group->priv->search['params']['module']['values'] = array('' => '') + $modules; + $this->config->group->priv->search['params']['package']['values'] = array('' => '') + $packages; + $this->config->group->priv->search['params']['recommendPrivs']['values'] = array('' => '') + $privs; + $this->config->group->priv->search['params']['dependentPrivs']['values'] = array('' => '') + $privs; + $this->loadModel('search')->setSearchParams($this->config->group->priv->search); } diff --git a/module/group/view/editmanageprivbylist.html.php b/module/group/view/editmanageprivbylist.html.php index 1b97244024..326920a586 100644 --- a/module/group/view/editmanageprivbylist.html.php +++ b/module/group/view/editmanageprivbylist.html.php @@ -15,6 +15,13 @@ $lang->privp->p1 = '依赖权限'; $lang->privp->p2 = '推荐权限'; ?> + +
+

+ noData;?> +

+
+
@@ -77,3 +84,4 @@ $lang->privp->p2 = '推荐权限'; show('right', 'pagerjs');?> +