getValue($cacheKey); if (empty($cached)) { $cached = parent::checkAccess($userId, $permissionName); $this->setValue($cacheKey, $cached); } return $cached; } /** * @inheritdoc */ protected function checkAccessRecursive($user, $itemName, $params, $assignments) { $cacheKey = 'checkAccessRecursive:' . $user . ':' . $itemName; if (!empty($params)) $cacheKey .= ':' . current($params)->primaryKey; $cached = $this->getValue($cacheKey); if (empty($cached)) { $cached = parent::checkAccessRecursive($user, $itemName, $params, $assignments); $this->setValue($cacheKey, $cached); } return $cached; } /** * @inheritdoc */ protected function getItem($name) { $cacheKey = 'Item:' . $name; $cached = $this->getValue($cacheKey); if (empty($cached)) { $cached = parent::getItem($name); $this->setValue($cacheKey, $cached); } return $cached; } /** * @inheritdoc */ public function getAssignments($userId) { if (empty($userId)) return parent::getAssignments($userId); $cacheKey = 'Assignments:' . $userId; $cached = $this->getValue($cacheKey); if (empty($cached)) { $cached = parent::getAssignments($userId); $this->setValue($cacheKey, $cached); } return $cached; } /** * Set a value in cache * @param $key * @param $value * @return mixed */ protected function setValue($key, $value) { $this->cachedData = $this->getCache()->get($this->cacheKeyName); if (empty($this->cachedData)) $this->cachedData = []; $this->cachedData[$key] = $value; return $this->getCache()->set($this->cacheKeyName, $this->cachedData, $this->cacheDuration); } /** * Get cached value * @param $key * @return mixed */ protected function getValue($key) { $cached = ArrayHelper::getValue($this->cachedData, $key); if (!isset($cached)) { $cacheData = $this->getCache()->get($this->cacheKeyName); $cached = $this->cachedData[$key] = ArrayHelper::getValue($cacheData, $key); } return $cached; } /** * Get cached value * @param $key * @return mixed */ public function deleteAllCache() { return $this->getCache()->delete($this->cacheKeyName); } /** * * @return \yii\caching\Cache */ private function getCache() { if (is_string($this->cache)) { $this->cache = \Yii::$app->get($this->cache); } return $this->cache; } }