mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-11 04:52:14 +09:00
Merge pull request #591 from kijin/pr/cache-module-grants
Grant 정보 캐싱 개선 (#584 보완)
This commit is contained in:
commit
9a1936de40
5 changed files with 113 additions and 29 deletions
|
|
@ -352,6 +352,8 @@ class moduleAdminController extends module
|
||||||
if(!$output->toBool()) return $output;
|
if(!$output->toBool()) return $output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rhymix\Framework\Cache::delete("site_and_module:module_grants:$module_srl");
|
||||||
$this->setMessage('success_registed');
|
$this->setMessage('success_registed');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -632,7 +634,10 @@ class moduleAdminController extends module
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rhymix\Framework\Cache::delete("site_and_module:module_grants:$module_srl");
|
||||||
$this->setMessage('success_registed');
|
$this->setMessage('success_registed');
|
||||||
|
|
||||||
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON')))
|
if(!in_array(Context::getRequestMethod(),array('XMLRPC','JSON')))
|
||||||
{
|
{
|
||||||
if(Context::get('success_return_url'))
|
if(Context::get('success_return_url'))
|
||||||
|
|
|
||||||
|
|
@ -827,6 +827,7 @@ class moduleController extends module
|
||||||
$output = executeQueryArray('module.insertSiteAdmin', $args);
|
$output = executeQueryArray('module.insertSiteAdmin', $args);
|
||||||
if(!$output->toBool()) return $output;
|
if(!$output->toBool()) return $output;
|
||||||
}
|
}
|
||||||
|
Rhymix\Framework\Cache::delete("site_and_module:site_admins:$site_srl");
|
||||||
return new Object();
|
return new Object();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -844,6 +845,9 @@ class moduleController extends module
|
||||||
$member_info = $oMemberModel->getMemberInfoByUserID($admin_id);
|
$member_info = $oMemberModel->getMemberInfoByUserID($admin_id);
|
||||||
|
|
||||||
if(!$member_info->member_srl) return;
|
if(!$member_info->member_srl) return;
|
||||||
|
|
||||||
|
Rhymix\Framework\Cache::delete("site_and_module:module_admins:$module_srl");
|
||||||
|
|
||||||
$args = new stdClass();
|
$args = new stdClass();
|
||||||
$args->module_srl = $module_srl;
|
$args->module_srl = $module_srl;
|
||||||
$args->member_srl = $member_info->member_srl;
|
$args->member_srl = $member_info->member_srl;
|
||||||
|
|
@ -864,6 +868,9 @@ class moduleController extends module
|
||||||
$member_info = $oMemberModel->getMemberInfoByUserID($admin_id);
|
$member_info = $oMemberModel->getMemberInfoByUserID($admin_id);
|
||||||
if($member_info->member_srl) $args->member_srl = $member_info->member_srl;
|
if($member_info->member_srl) $args->member_srl = $member_info->member_srl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rhymix\Framework\Cache::delete("site_and_module:module_admins:$module_srl");
|
||||||
|
|
||||||
return executeQuery('module.deleteAdminId', $args);
|
return executeQuery('module.deleteAdminId', $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1046,6 +1053,8 @@ class moduleController extends module
|
||||||
executeQuery('module.insertModuleGrant', $args);
|
executeQuery('module.insertModuleGrant', $args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rhymix\Framework\Cache::delete("site_and_module:module_grants:$module_srl");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1055,7 +1064,10 @@ class moduleController extends module
|
||||||
{
|
{
|
||||||
$args = new stdClass();
|
$args = new stdClass();
|
||||||
$args->module_srl = $module_srl;
|
$args->module_srl = $module_srl;
|
||||||
return executeQuery('module.deleteModuleGrants', $args);
|
$output = executeQuery('module.deleteModuleGrants', $args);
|
||||||
|
|
||||||
|
Rhymix\Framework\Cache::delete("site_and_module:module_grants:$module_srl");
|
||||||
|
return $output;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1594,25 +1594,36 @@ class moduleModel extends module
|
||||||
*/
|
*/
|
||||||
function isSiteAdmin($member_info, $site_srl = null)
|
function isSiteAdmin($member_info, $site_srl = null)
|
||||||
{
|
{
|
||||||
if(!$member_info->member_srl) return false;
|
if (!$member_info || !$member_info->member_srl)
|
||||||
if($member_info->is_admin == 'Y') return true;
|
{
|
||||||
|
return false;
|
||||||
$args = new stdClass();
|
}
|
||||||
if(!isset($site_srl))
|
if ($member_info->is_admin == 'Y')
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if ($site_srl === null)
|
||||||
{
|
{
|
||||||
$site_module_info = Context::get('site_module_info');
|
$site_module_info = Context::get('site_module_info');
|
||||||
if(!$site_module_info) return;
|
if(!$site_module_info) return false;
|
||||||
$args->site_srl = $site_module_info->site_srl;
|
$site_srl = $site_module_info->site_srl;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$args->site_srl = $site_srl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$args->member_srl = $member_info->member_srl;
|
$site_srl = $site_srl ?: 0;
|
||||||
$output = executeQuery('module.isSiteAdmin', $args);
|
$site_admins = Rhymix\Framework\Cache::get("site_and_module:site_admins:$site_srl");
|
||||||
if($output->data->member_srl == $args->member_srl) return true;
|
if ($site_admins === null)
|
||||||
return false;
|
{
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->site_srl = $site_srl;
|
||||||
|
$output = executeQueryArray('module.isSiteAdmin', $args);
|
||||||
|
$site_admins = array();
|
||||||
|
foreach ($output->data as $site_admin)
|
||||||
|
{
|
||||||
|
$site_admins[$site_admin->member_srl] = true;
|
||||||
|
}
|
||||||
|
Rhymix\Framework\Cache::set("site_and_module:site_admins:$site_srl", $site_admins, 0, true);
|
||||||
|
}
|
||||||
|
return isset($site_admins[$member_info->member_srl]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -1626,6 +1637,43 @@ class moduleModel extends module
|
||||||
return $output->data;
|
return $output->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Check if a member is a module administrator
|
||||||
|
*/
|
||||||
|
function isModuleAdmin($member_info, $module_srl = null)
|
||||||
|
{
|
||||||
|
if (!$member_info || !$member_info->member_srl)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ($member_info->is_admin == 'Y')
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if ($module_srl === null)
|
||||||
|
{
|
||||||
|
$site_module_info = Context::get('site_module_info');
|
||||||
|
if(!$site_module_info) return false;
|
||||||
|
$module_srl = $site_module_info->module_srl;
|
||||||
|
}
|
||||||
|
|
||||||
|
$module_srl = $module_srl ?: 0;
|
||||||
|
$module_admins = Rhymix\Framework\Cache::get("site_and_module:module_admins:$module_srl");
|
||||||
|
if ($module_admins === null)
|
||||||
|
{
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->module_srl = $module_srl;
|
||||||
|
$output = executeQueryArray('module.getModuleAdmin', $args);
|
||||||
|
$module_admins = array();
|
||||||
|
foreach ($output->data as $module_admin)
|
||||||
|
{
|
||||||
|
$module_admins[$module_admin->member_srl] = true;
|
||||||
|
}
|
||||||
|
Rhymix\Framework\Cache::set("site_and_module:module_admins:$module_srl", $module_admins, 0, true);
|
||||||
|
}
|
||||||
|
return isset($module_admins[$member_info->member_srl]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get admin ID of the module
|
* @brief Get admin ID of the module
|
||||||
*/
|
*/
|
||||||
|
|
@ -1862,13 +1910,18 @@ class moduleModel extends module
|
||||||
*/
|
*/
|
||||||
function getGrant($module_info, $member_info, $xml_info = '')
|
function getGrant($module_info, $member_info, $xml_info = '')
|
||||||
{
|
{
|
||||||
$grant = new stdClass();
|
if (!$xml_info && isset($GLOBALS['__MODULE_GRANT__'][intval($module_info->module_srl)][intval($member_info->member_srl)]))
|
||||||
|
{
|
||||||
|
return $GLOBALS['__MODULE_GRANT__'][intval($module_info->module_srl)][intval($member_info->member_srl)];
|
||||||
|
}
|
||||||
|
|
||||||
|
$grant = new stdClass();
|
||||||
if(!$xml_info)
|
if(!$xml_info)
|
||||||
{
|
{
|
||||||
$module = $module_info->module;
|
$module = $module_info->module;
|
||||||
$xml_info = $this->getModuleActionXml($module);
|
$xml_info = $this->getModuleActionXml($module);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set variables to grant group permission
|
// Set variables to grant group permission
|
||||||
$module_srl = $module_info->module_srl;
|
$module_srl = $module_info->module_srl;
|
||||||
$grant_info = $xml_info->grant;
|
$grant_info = $xml_info->grant;
|
||||||
|
|
@ -1898,15 +1951,13 @@ class moduleModel extends module
|
||||||
// Get a type of granted permission
|
// Get a type of granted permission
|
||||||
$grant->access = $grant->manager = $grant->is_site_admin = ($member_info->is_admin=='Y'||$this->isSiteAdmin($member_info, $module_info->site_srl))?true:false;
|
$grant->access = $grant->manager = $grant->is_site_admin = ($member_info->is_admin=='Y'||$this->isSiteAdmin($member_info, $module_info->site_srl))?true:false;
|
||||||
$grant->is_admin = ($member_info->is_admin == 'Y') ? true : false;
|
$grant->is_admin = ($member_info->is_admin == 'Y') ? true : false;
|
||||||
|
|
||||||
// If a just logged-in member is, check if the member is a module administrator
|
// If a just logged-in member is, check if the member is a module administrator
|
||||||
if(!$grant->manager && $member_info->member_srl)
|
if (!$grant->manager && $member_info->member_srl && $this->isModuleAdmin($member_info, $module_srl))
|
||||||
{
|
{
|
||||||
$args = new stdClass();
|
$grant->manager = true;
|
||||||
$args->module_srl = $module_srl;
|
|
||||||
$args->member_srl = $member_info->member_srl;
|
|
||||||
$output = executeQuery('module.getModuleAdmin',$args);
|
|
||||||
if($output->data && $output->data->member_srl == $member_info->member_srl) $grant->manager = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If not an administrator, get information from the DB and grant manager privilege.
|
// If not an administrator, get information from the DB and grant manager privilege.
|
||||||
if(!$grant->manager)
|
if(!$grant->manager)
|
||||||
{
|
{
|
||||||
|
|
@ -1918,9 +1969,7 @@ class moduleModel extends module
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$args = new stdClass;
|
$output = $this->getModuleGrants($module_srl);
|
||||||
$args->module_srl = $module_srl;
|
|
||||||
$output = executeQueryArray('module.getModuleGrants', $args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$grant_exists = $granted = array();
|
$grant_exists = $granted = array();
|
||||||
|
|
@ -2015,9 +2064,27 @@ class moduleModel extends module
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$GLOBALS['__MODULE_GRANT__'][intval($module_info->module_srl)][intval($member_info->member_srl)] = $grant;
|
||||||
|
|
||||||
return $grant;
|
return $grant;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get module grants
|
||||||
|
*/
|
||||||
|
function getModuleGrants($module_srl)
|
||||||
|
{
|
||||||
|
$output = Rhymix\Framework\Cache::get("site_and_module:module_grants:$module_srl");
|
||||||
|
if ($output === null)
|
||||||
|
{
|
||||||
|
$args = new stdClass;
|
||||||
|
$args->module_srl = $module_srl;
|
||||||
|
$output = executeQueryArray('module.getModuleGrants', $args);
|
||||||
|
Rhymix\Framework\Cache::set("site_and_module:module_grants:$module_srl", $output, 0, true);
|
||||||
|
}
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
function getModuleFileBox($module_filebox_srl)
|
function getModuleFileBox($module_filebox_srl)
|
||||||
{
|
{
|
||||||
$args = new stdClass();
|
$args = new stdClass();
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
<table name="module_admins" />
|
<table name="module_admins" />
|
||||||
</tables>
|
</tables>
|
||||||
<conditions>
|
<conditions>
|
||||||
<condition operation="equal" column="module_srl" var="module_srl" notnull="notnull" filter="number" />
|
<condition operation="equal" column="module_srl" var="module_srl" filter="number" />
|
||||||
<condition operation="equal" column="member_srl" var="member_srl" notnull="notnull" pipe="and" />
|
<condition operation="equal" column="member_srl" var="member_srl" pipe="and" />
|
||||||
</conditions>
|
</conditions>
|
||||||
</query>
|
</query>
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<column name="member_srl" />
|
<column name="member_srl" />
|
||||||
</columns>
|
</columns>
|
||||||
<conditions>
|
<conditions>
|
||||||
<condition operation="equal" column="site_srl" var="site_srl" notnull="notnull" />
|
<condition operation="equal" column="site_srl" var="site_srl" filter="number" />
|
||||||
<condition operation="equal" column="member_srl" var="member_srl" notnull="notnull" pipe="and" />
|
<condition operation="equal" column="member_srl" var="member_srl" pipe="and" />
|
||||||
</conditions>
|
</conditions>
|
||||||
</query>
|
</query>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue