From 9d594526b4e7fb54ef6a35b2672278bf7aab4c34 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Fri, 16 Sep 2016 16:44:29 +0900 Subject: [PATCH] Cache grant information for modules and documents https://www.xetown.com/qna/374223 http://sejin7940.co.kr/xe_tips/108198 --- modules/document/document.item.php | 42 +++++++++++++++++++++++------- modules/module/module.model.php | 10 +++++++ 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/modules/document/document.item.php b/modules/document/document.item.php index 605703b43..788325118 100644 --- a/modules/document/document.item.php +++ b/modules/document/document.item.php @@ -20,6 +20,11 @@ class documentItem extends Object * @var string */ var $lang_code = null; + /** + * grant + * @var bool + */ + var $grant_cache = null; /** * Status of allow trackback * @var bool @@ -157,25 +162,44 @@ class documentItem extends Object function isGranted() { - if($_SESSION['own_document'][$this->document_srl]) return true; - - if(!Context::get('is_logged')) return false; - + if ($this->grant_cache !== null) + { + return $this->grant_cache; + } + + if ($_SESSION['own_document'][$this->document_srl]) + { + return $this->grant_cache = true; + } + $logged_info = Context::get('logged_info'); - if($logged_info->is_admin == 'Y') return true; + if (!$logged_info->member_srl) + { + return $this->grant_cache = false; + } + if ($logged_info->is_admin == 'Y') + { + return $this->grant_cache = true; + } + if ($this->get('member_srl') && abs($this->get('member_srl')) == $logged_info->member_srl) + { + return $this->grant_cache = true; + } $oModuleModel = getModel('module'); $grant = $oModuleModel->getGrant($oModuleModel->getModuleInfoByModuleSrl($this->get('module_srl')), $logged_info); - if($grant->manager) return true; + if ($grant->manager) + { + return $this->grant_cache = true; + } - if($this->get('member_srl') && ($this->get('member_srl') == $logged_info->member_srl || $this->get('member_srl')*-1 == $logged_info->member_srl)) return true; - - return false; + return $this->grant_cache = false; } function setGrant() { $_SESSION['own_document'][$this->document_srl] = true; + $this->grant_cache = true; } function isAccessible() diff --git a/modules/module/module.model.php b/modules/module/module.model.php index 9ffafb54a..563d0a4f3 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -1862,6 +1862,13 @@ class moduleModel extends module */ function getGrant($module_info, $member_info, $xml_info = '') { + $cache_key = sprintf('site_and_module:module_grant:%d:%d', $module_info->module_srl, $member_info->member_srl); + $grant = Rhymix\Framework\Cache::get($cache_key); + if ($grant !== null) + { + return $grant; + } + $grant = new stdClass(); if(!$xml_info) @@ -2014,6 +2021,9 @@ class moduleModel extends module } } } + + // Set to cache and return + Rhymix\Framework\Cache::set($cache_key, $grant, 0, true); return $grant; }