* Add the privs of ipd version.

This commit is contained in:
hufangzhou
2023-05-17 17:13:18 +08:00
parent e93e13a724
commit 23d119af8b
2 changed files with 166 additions and 4 deletions
+162
View File
@@ -1498,6 +1498,168 @@ class groupModel extends model
die('success');
}
/**
* Super Model: Init views, modules and privileges for IPD.
*
* @access public
* @return bool
*/
public function initPrivs4IPD()
{
$views = array_keys(json_decode(json_encode($this->lang->mainNav), true));
$resources = json_decode(json_encode($this->lang->resource), true);
$hasStoredPrivs = $this->dao->select('*')->from(TABLE_PRIV)->fetchAll('id');
foreach($hasStoredPrivs as $privID => $hasStoredPriv)
{
$hasStoredPrivs["{$hasStoredPriv->module}-{$hasStoredPriv->method}"] = $hasStoredPriv;
unset($hasStoredPrivs[$privID]);
}
$hasStoredManagered = $this->dao->select('*')->from(TABLE_PRIVMANAGER)->where('type')->ne('package')->fetchGroup('type', 'code');
$hasStoredViews = $hasStoredManagered['view'];
$hasStoredModules = $hasStoredManagered['module'];
$viewOrder = 1;
$viewPairs = array();
foreach($views as $view)
{
if($view == 'menuOrder') continue;
if(!empty($hasStoredViews[$view]))
{
$vision = strpos($hasStoredViews[$view]->vision, ",{$this->config->vision},") !== false ? $hasStoredViews[$view]->vision : $hasStoredViews[$view]->vision . "{$this->config->vision},";
$edition = strpos($hasStoredViews[$view]->edition, ",{$this->config->edition},") !== false ? $hasStoredViews[$view]->edition : $hasStoredViews[$view]->edition . "{$this->config->edition},";
$viewID = $hasStoredViews[$view]->id;
$this->dao->update(TABLE_PRIVMANAGER)
->set('vision')->eq($vision)
->set('edition')->eq($edition)
->where('id')->eq($viewID)
->exec();
}
else
{
$viewManager = new stdclass();
$viewManager->parent = 0;
$viewManager->code = $view;
$viewManager->type = 'view';
$viewManager->edition = ',ipd,';
$viewManager->vision = ",{$this->config->vision},";
$viewManager->order = $viewOrder * 10;
$viewOrder ++;
$this->dao->insert(TABLE_PRIVMANAGER)->data($viewManager)->exec();
$viewID = $this->dao->lastInsertId();
foreach($this->config->langs as $lang => $langValue)
{
$viewLang = new stdclass();
$viewLang->objectID = $viewID;
$viewLang->objectType = 'manager';
$viewLang->lang = $lang;
$viewLang->key = $view;
$viewLang->value = '';
$viewLang->desc = '';
$this->dao->insert(TABLE_PRIVLANG)->data($viewLang)->exec();
}
}
$viewPairs[$view] = $viewID;
}
$moduleOrder = 1;
foreach($resources as $module => $privs)
{
if(!empty($hasStoredModules[$module]))
{
$vision = strpos($hasStoredModules[$module]->vision, ",{$this->config->vision},") !== false ? $hasStoredModules[$module]->vision : $hasStoredModules[$module]->vision . "{$this->config->vision},";
$edition = strpos($hasStoredModules[$module]->edition, ",{$this->config->edition},") !== false ? $hasStoredModules[$module]->edition : $hasStoredModules[$module]->edition . "{$this->config->edition},";
$moduleID = $hasStoredModules[$module]->id;
$this->dao->update(TABLE_PRIVMANAGER)
->set('vision')->eq($vision)
->set('edition')->eq($edition)
->where('id')->eq($moduleID)
->exec();
}
else
{
$moduleMenu = isset($this->lang->navGroup->{$module}) ? $this->lang->navGroup->{$module} : '';
$moduleManager = new stdclass();
$moduleManager->parent = $moduleMenu ? $viewPairs[$moduleMenu] : 0;
$moduleManager->code = $module;
$moduleManager->type = 'module';
$moduleManager->edition = ',ipd,';
$moduleManager->vision = ",{$this->config->vision},";
$moduleManager->order = $moduleOrder * 10;
$moduleOrder ++;
$this->dao->insert(TABLE_PRIVMANAGER)->data($moduleManager)->exec();
$moduleID = $this->dao->lastInsertId();
foreach($this->config->langs as $lang => $langValue)
{
$moduleLang = new stdclass();
$moduleLang->objectID = $moduleID;
$moduleLang->objectType = 'manager';
$moduleLang->lang = $lang;
$moduleLang->key = $module;
$moduleLang->value = '';
$moduleLang->desc = '';
$this->dao->insert(TABLE_PRIVLANG)->data($moduleLang)->exec();
}
}
$privOrder = 1;
foreach($privs as $methodName => $methodLang)
{
if(!empty($hasStoredPrivs["$module-$methodName"]))
{
$vision = strpos($hasStoredPrivs["$module-$methodName"]->vision, ",{$this->config->vision},") !== false ? $hasStoredPrivs["$module-$methodName"]->vision : $hasStoredPrivs["$module-$methodName"]->vision . "{$this->config->vision},";
$edition = strpos($hasStoredPrivs["$module-$methodName"]->edition, ",{$this->config->edition},") !== false ? $hasStoredPrivs["$module-$methodName"]->edition : $hasStoredPrivs["$module-$methodName"]->edition . "{$this->config->edition},";
$this->dao->update(TABLE_PRIV)
->set('vision')->eq($vision)
->set('edition')->eq($edition)
->where('id')->eq($hasStoredPrivs["$module-$methodName"]->id)
->exec();
}
else
{
$priv = new stdclass();
$priv->module = $module;
$priv->method = $methodName;
$priv->parent = $moduleID;
$priv->edition = ',ipd,';
$priv->vision = ",{$this->config->vision},";
$priv->system = '1';
$priv->order = $privOrder * 10;
$privOrder ++;
$this->dao->insert(TABLE_PRIV)->data($priv)->exec();
$privID = $this->dao->lastInsertId();
foreach($this->config->langs as $lang => $langValue)
{
$privLang = new stdclass();
$privLang->objectID = $privID;
$privLang->objectType = 'priv';
$privLang->lang = $lang;
$privLang->key = "{$module}-{$methodLang}";
$privLang->value = '';
$privLang->desc = '';
$this->dao->replace(TABLE_PRIVLANG)->data($privLang)->exec();
}
}
}
}
return true;
}
/**
* Get priv by id.
*