* Finish task #89846.

This commit is contained in:
liumengyi
2023-04-06 13:25:29 +08:00
parent 48048085c9
commit bba7fa92d7
3 changed files with 42 additions and 18 deletions
+4 -4
View File
@@ -248,6 +248,7 @@ class group extends control
$privs = $this->group->getPrivsListByView($menu);
$privPackages = $this->group->getPrivManagerPairs('package');
$privLang = $this->group->transformPrivLang($privs);
$privs = $this->group->getCustomPrivs($menu, $privs);
$privList = array();
$privMethods = array();
@@ -265,11 +266,11 @@ class group extends control
if(!isset($selectPrivs[$priv->parentCode][$priv->parent])) $selectPrivs[$priv->parentCode][$priv->parent] = 0;
if(!empty($groupPrivs[$priv->module][$priv->method])) $selectPrivs[$priv->parentCode][$priv->parent] ++;
}
$unassignedModule = array_diff(array_keys(get_object_vars($this->lang->resource)), array_keys($privList));
$unassignedModule = array_diff(array_keys(get_object_vars($this->lang->resource)), array_keys($privList));
foreach($unassignedModule as $index => $module)
{
if(!$this->group->checkMenuModule($menu, $module)) continue;;
if(!$this->group->checkMenuModule($menu, $module)) continue;
$selectPrivs[$module] = array();
$selectPrivs[$module][0] = 0;
@@ -290,7 +291,6 @@ class group extends control
$this->view->privList = $privList;
$this->view->privMethods = $privMethods;
$this->view->selectPrivs = $selectPrivs;
$this->view->privLang = $privLang;
$this->view->privPackages = $privPackages;
}
elseif($type == 'byModule')
@@ -449,7 +449,7 @@ class group extends control
*/
public function editManagePriv($browseType = '', $view = '', $paramID = 0, $recTotal = 0, $recPerPage = 100, $pageID = 1)
{
if(empty($browseType) and $browseType != 'bysearch') $browseType = $this->cookie->managePrivEditType ? $this->cookie->managePrivEditType : 'bycard';;
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);
+35
View File
@@ -2005,4 +2005,39 @@ class groupModel extends model
return $needPairs ? $privPairs : $privs;
}
/**
* Get custom privs.
*
* @param string $menu
* @param array $privs
* @access public
* @return array
*/
public function getCustomPrivs($menu, $privs = array())
{
$allPrivs = $this->dao->select('module,method')->from(TABLE_PRIV)->fetchGroup('module', 'method');
foreach($this->lang->resource as $module => $methods)
{
foreach($methods as $method => $methodLabel)
{
if(isset($allPrivs[$module][$method])) continue;
if(!$this->checkMenuModule($menu, $module)) continue;
if(!isset($this->lang->{$module}->{$methodLabel})) $this->app->loadLang($module);
$key = "{$module}-{$methodLabel}";
$priv = new stdclass();
$priv->module = $module;
$priv->method = $method;
$priv->parent = 0;
$priv->key = $key;
$priv->parentCode = $module;
$priv->moduleOrder = 0;
$priv->name = $this->lang->{$module}->{$methodLabel};
$privs[$key] = $priv;
}
}
return $privs;
}
}
+3 -14
View File
@@ -112,9 +112,8 @@
$i = 1;
$unassigned = (!empty($moduleActions) and !empty($privMethods[$moduleName])) ? array_diff(array_keys(get_object_vars($moduleActions)), $privMethods[$moduleName]) : array();
$modulePrivs = count($privList[$moduleName], 1) - count($selectPrivs[$moduleName], 1) + count($unassigned);
$moduleSelect = array_sum($selectPrivs[$moduleName]);
$modulePrivs = count($privList[$moduleName], 1) - count($selectPrivs[$moduleName], 1);
$moduleSelect = array_sum($selectPrivs[$moduleName]);
?>
<?php foreach($packages as $packageID => $privs):?>
<tr class='<?php echo cycle('even, bg-gray');?>'>
@@ -128,7 +127,7 @@
<?php endif;?>
<?php
$packagePrivs = count($privs);
$packageSelect = $selectPrivs[$moduleName][$packageID] + ($packageID == 0 ? count($unassigned) : 0);
$packageSelect = $selectPrivs[$moduleName][$packageID];
?>
<th class='<?php echo $i == 1 ? 'td-sm' : 'td-md';?> text-middle text-left package' data-module='<?php echo $moduleName;?>' data-package='<?php echo $packageID;?>' all-privs='<?php echo $packagePrivs;?>' select-privs='<?php echo $packageSelect;?>'>
<div class="checkbox-primary checkbox-inline checkbox-left check-all">
@@ -151,16 +150,6 @@
</div>
</div>
<?php endforeach;?>
<?php if($packageID == 0):?>
<?php foreach($moduleActions as $action => $actionLabel):?>
<?php if(array_search($action, $unassigned) === false) continue;?>
<div class="group-item" data-module='<?php echo $moduleName;?>' data-package='<?php echo $packageID;?>'>
<div class="checkbox-primary">
<?php echo html::checkbox("actions[{$moduleName}]", array($action => $lang->$moduleName->$actionLabel), isset($groupPrivs[$moduleName][$action]) ? $action : '', "title='{$lang->$moduleName->$actionLabel}'", 'inline');?>
</div>
</div>
<?php endforeach;?>
<?php endif;?>
</td>
</tr>
<?php $i ++;?>