* Code for task #86260.

This commit is contained in:
hufangzhou
2023-03-09 07:17:42 +00:00
parent 0f6839155d
commit 378fb4f839
9 changed files with 210 additions and 111 deletions
+70 -1
View File
@@ -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=&paramID=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&section=&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));
}
}
+11 -2
View File
@@ -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;
})
}
});
});
+17 -16
View File
@@ -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';
+17 -16
View File
@@ -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';
+17 -16
View File
@@ -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';
+20 -19
View File
@@ -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 = '权限包';
+46 -6
View File
@@ -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();
}
}
+1 -1
View File
@@ -46,7 +46,7 @@
<div class="menuTree depend menu-active-primary menu-hover-primary"></div>
</div>
<div class="panel-bottom">
<?php echo html::commonButton ('<i class="icon icon-plus"></i>' . $lang->group->add, '', 'btn btn-primary');?>
<?php echo html::a($this->inLink('addDependent'), $lang->group->add, '', "class='btn btn-primary'");?>
</div>
</div>
<div class="priv-panel mt-m">
+11 -34
View File
@@ -21,48 +21,25 @@
</tr>
</thead>
<tbody>
<?php foreach($privList as $module => $packages):?>
<tr class="permission-row">
<td class="flex-sm text-center"> 首页 </td>
<td class="flex-sm text-center"> 首页 </td>
<td class="flex-content">
<div class="group-item">
<div class="checkbox-primary">
<input type="checkbox" name="actions[my][]" value="index" checked="checked" title="地盘仪表盘" id="actions[my]index"></input>
<label for="actions[my]index"> 地盘仪表盘 </label>
</div>
</div>
</td>
</tr>
<tr class="permission-row">
<td class="flex-sm text-center"> 地盘 </td>
<td class="flex-sm text-center"> 地盘</td>
<td class="flex-sm text-center" rowspan="<?php echo count($packages);?>"><?php echo zget($moduleLang, $module, $module);?></td>
<?php foreach($packages as $packageID => $privs):?>
<td class="flex-sm text-center"><?php echo zget($privPackages, $packageID, $lang->group->unassigned);?></td>
<td class="flex-content sorter-group">
<?php foreach($privs as $privID => $priv):?>
<div class="group-item">
<div class="checkbox-primary">
<input type="checkbox" name="actions[my][]" value="index" checked="checked" title="地盘仪表盘" id="actions[my]index"></input>
<label for="actions[my]index"> 地盘仪表盘0 </label>
</div>
</div>
<div class="group-item">
<div class="checkbox-primary">
<input type="checkbox" name="actions[my][]" value="index" checked="checked" title="地盘仪表盘" id="actions[my]index"></input>
<label for="actions[my]index"> 地盘仪表盘1 </label>
</div>
</div>
<div class="group-item">
<div class="checkbox-primary">
<input type="checkbox" name="actions[my][]" value="index" checked="checked" title="地盘仪表盘" id="actions[my]index"></input>
<label for="actions[my]index"> 地盘仪表盘2 </label>
</div>
</div>
<div class="group-item">
<div class="checkbox-primary">
<input type="checkbox" name="actions[my][]" value="index" checked="checked" title="地盘仪表盘" id="actions[my]index"></input>
<label for="actions[my]index"> 地盘仪表盘3 </label>
<?php $action = $priv->methodName;?>
<?php $label = zget($privLang, $privID, $action);?>
<?php echo html::checkbox("actions[$module][]", array($action => $label), $action, "title='{$label}' id='actions[$module]$action' data-id='$privID'");?>
</div>
</div>
<?php endforeach;?>
</td>
<?php endforeach;?>
</tr>
<?php endforeach;?>
</tbody>
</table>
</form>