* Fix bug#39017.

This commit is contained in:
zhujinyong
2023-09-27 16:18:07 +08:00
parent 33387dfdb2
commit 0cc3ea432e
2 changed files with 50 additions and 16 deletions
+34
View File
@@ -2362,6 +2362,34 @@ class groupModel extends model
}
}
/**
* Process circular dependency.
*
* @param array $depends
* @param array $privs
* @access protected
* @return array
*/
protected function processDepends($depends, $privs)
{
foreach($privs as $priv)
{
if(!isset($depends[$priv])) continue;
foreach($depends[$priv] as $dependPriv)
{
if(isset($privs[$dependPriv])) continue;
$privs[$dependPriv] = $dependPriv;
$dependPrivs = $this->processDepends($depends, $depends[$dependPriv]);
foreach($dependPrivs as $depend) $privs[$depend] = $depend;
}
}
return $privs;
}
/**
* Get related privs.
*
@@ -2375,6 +2403,8 @@ class groupModel extends model
{
$this->loadResourceLang();
$depends = array();
$privSubsets = array();
$relatedPrivs = array('depend' => array(), 'recommend' => array());
foreach($this->config->group->package as $packagePage => $package)
@@ -2387,6 +2417,7 @@ class groupModel extends model
{
/* Show related pirvs when select. */
if($type == 'recommend' && in_array($privCode, $recommendSelect)) $relatedPrivs[$type][$privCode] = $privCode;
if($type == 'depend') $depends[$privCode] = $priv['depend'];
if(!in_array($privCode, $selectedPrivList) || !isset($priv[$type])) continue;
@@ -2398,6 +2429,9 @@ class groupModel extends model
}
}
/* Process circular dependency. */
$relatedPrivs['depend'] = $this->processDepends($depends, $relatedPrivs['depend']);
$subsetPrivs = array('depend' => array(), 'recommend' => array());
foreach(array('depend', 'recommend') as $type)
{
+16 -16
View File
@@ -1481,7 +1481,7 @@ $config->group->package->holiday = new stdclass();
$config->group->package->holiday->order = 10;
$config->group->package->holiday->subset = 'modelconfig';
$config->group->package->holiday->privs = array();
$config->group->package->holiday->privs['holiday-browse'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd', 'order' => 5, 'depend' => array(), 'recommend' => array());
$config->group->package->holiday->privs['holiday-browse'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd', 'order' => 5, 'depend' => array('admin-index'), 'recommend' => array());
$config->group->package->holiday->privs['holiday-create'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd', 'order' => 10, 'depend' => array('holiday-browse'), 'recommend' => array('holiday-delete', 'holiday-edit'));
$config->group->package->holiday->privs['holiday-edit'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd', 'order' => 15, 'depend' => array('holiday-browse'), 'recommend' => array('holiday-create'));
$config->group->package->holiday->privs['holiday-delete'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd', 'order' => 20, 'depend' => array('holiday-browse'), 'recommend' => array('holiday-create', 'holiday-edit'));
@@ -2649,9 +2649,9 @@ $config->group->package->mail = new stdclass();
$config->group->package->mail->order = 10;
$config->group->package->mail->subset = 'notifysetting';
$config->group->package->mail->privs = array();
$config->group->package->mail->privs['mail-index'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 0, 'depend' => array(), 'recommend' => array());
$config->group->package->mail->privs['mail-detect'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 5, 'depend' => array(), 'recommend' => array());
$config->group->package->mail->privs['mail-edit'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 1, 'depend' => array('message-index'), 'recommend' => array());
$config->group->package->mail->privs['mail-detect'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 5, 'depend' => array('admin-index'), 'recommend' => array());
$config->group->package->mail->privs['mail-index'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 0, 'depend' => array('mail-detect'), 'recommend' => array());
$config->group->package->mail->privs['mail-edit'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 1, 'depend' => array('mail-detect', 'message-index'), 'recommend' => array());
$config->group->package->mail->privs['mail-save'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 3, 'depend' => array('mail-edit'), 'recommend' => array('mail-reset'));
$config->group->package->mail->privs['mail-test'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 2, 'depend' => array('mail-edit'), 'recommend' => array());
$config->group->package->mail->privs['mail-reset'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 4, 'depend' => array('mail-edit'), 'recommend' => array('mail-save'));
@@ -2728,7 +2728,7 @@ $config->group->package->backup = new stdclass();
$config->group->package->backup->order = 5;
$config->group->package->backup->subset = 'admin';
$config->group->package->backup->privs = array();
$config->group->package->backup->privs['backup-index'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 0, 'depend' => array(), 'recommend' => array());
$config->group->package->backup->privs['backup-index'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 0, 'depend' => array('admin-index'), 'recommend' => array());
$config->group->package->backup->privs['backup-backup'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 2, 'depend' => array('backup-index'), 'recommend' => array());
$config->group->package->backup->privs['backup-restore'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 3, 'depend' => array('backup-index'), 'recommend' => array());
$config->group->package->backup->privs['backup-delete'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'lite,rnd,or', 'order' => 4, 'depend' => array('backup-index'), 'recommend' => array());
@@ -2740,7 +2740,7 @@ $config->group->package->trash = new stdclass();
$config->group->package->trash->order = 15;
$config->group->package->trash->subset = 'systemsetting';
$config->group->package->trash->privs = array();
$config->group->package->trash->privs['action-trash'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 0, 'depend' => array(), 'recommend' => array());
$config->group->package->trash->privs['action-trash'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 0, 'depend' => array('admin-index'), 'recommend' => array());
$config->group->package->trash->privs['action-undelete'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 1, 'depend' => array('action-trash'), 'recommend' => array());
$config->group->package->trash->privs['action-hideOne'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 2, 'depend' => array('action-trash'), 'recommend' => array());
@@ -2769,21 +2769,21 @@ $config->group->package->ldap->order = 30;
$config->group->package->ldap->subset = 'systemsetting';
$config->group->package->ldap->privs = array();
$config->group->package->ldap->privs['user-importldap'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 15, 'depend' => array('ldap-set'), 'recommend' => array());
$config->group->package->ldap->privs['ldap-set'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 10, 'depend' => array(), 'recommend' => array());
$config->group->package->ldap->privs['ldap-set'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 10, 'depend' => array('admin-index'), 'recommend' => array());
$config->group->package->chat = new stdclass();
$config->group->package->chat->order = 35;
$config->group->package->chat->subset = 'systemsetting';
$config->group->package->chat->privs = array();
$config->group->package->chat->privs['admin-xuanxuan'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 8, 'depend' => array(), 'recommend' => array());
$config->group->package->chat->privs['conference-admin'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 3, 'depend' => array(), 'recommend' => array());
$config->group->package->chat->privs['setting-xuanxuan'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 0, 'depend' => array(), 'recommend' => array());
$config->group->package->chat->privs['im-downloadXxdPackage'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 2, 'depend' => array(), 'recommend' => array());
$config->group->package->chat->privs['im-debug'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 1, 'depend' => array(), 'recommend' => array());
$config->group->package->chat->privs['client-browse'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 4, 'depend' => array(), 'recommend' => array());
$config->group->package->chat->privs['client-create'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 5, 'depend' => array(), 'recommend' => array());
$config->group->package->chat->privs['client-edit'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 6, 'depend' => array(), 'recommend' => array());
$config->group->package->chat->privs['client-delete'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 7, 'depend' => array(), 'recommend' => array());
$config->group->package->chat->privs['admin-xuanxuan'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 8, 'depend' => array('admin-index'), 'recommend' => array());
$config->group->package->chat->privs['conference-admin'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 3, 'depend' => array('admin-xuanxuan'), 'recommend' => array());
$config->group->package->chat->privs['setting-xuanxuan'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 0, 'depend' => array('admin-xuanxuan'), 'recommend' => array());
$config->group->package->chat->privs['im-downloadXxdPackage'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 2, 'depend' => array('admin-xuanxuan'), 'recommend' => array());
$config->group->package->chat->privs['im-debug'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 1, 'depend' => array('admin-xuanxuan'), 'recommend' => array());
$config->group->package->chat->privs['client-browse'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 4, 'depend' => array('admin-xuanxuan'), 'recommend' => array());
$config->group->package->chat->privs['client-create'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 5, 'depend' => array('admin-xuanxuan'), 'recommend' => array());
$config->group->package->chat->privs['client-edit'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 6, 'depend' => array('admin-xuanxuan'), 'recommend' => array());
$config->group->package->chat->privs['client-delete'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 7, 'depend' => array('admin-xuanxuan'), 'recommend' => array());
$config->group->package->jenkins = new stdclass();
$config->group->package->jenkins->order = 25;