shell bypass 403
<?php namespace Rennokki\QueryCache\Traits; use Rennokki\QueryCache\FlushQueryCacheObserver; use Rennokki\QueryCache\Query\Builder; /** * @method static bool flushQueryCache(string[] $array = []) * @method static bool flushQueryCacheWithTag(string $string) * @method static \Illuminate\Database\Query\Builder|static cacheForever() * @method static \Illuminate\Database\Query\Builder|static dontCache() * @method static \Illuminate\Database\Query\Builder|static doNotCache() */ trait QueryCacheable { /** * Boot the trait. * * @return void */ public static function bootQueryCacheable() { if (isset(static::$flushCacheOnUpdate) && static::$flushCacheOnUpdate) { static::observe( static::getFlushQueryCacheObserver() ); } } /** * Get the observer class name that will * observe the changes and will invalidate the cache * upon database change. * * @return string */ protected static function getFlushQueryCacheObserver() { return FlushQueryCacheObserver::class; } /** * When invalidating automatically on update, you can specify * which tags to invalidate. * * @return array */ public function getCacheTagsToInvalidateOnUpdate(): array { return $this->getCacheBaseTags(); } /** * {@inheritdoc} */ protected function newBaseQueryBuilder() { $connection = $this->getConnection(); $builder = new Builder( $connection, $connection->getQueryGrammar(), $connection->getPostProcessor() ); $builder->dontCache(); if ($this->cacheFor) { $builder->cacheFor($this->cacheFor); } if ($this->cacheTags) { $builder->cacheTags($this->cacheTags); } if ($this->cachePrefix) { $builder->cachePrefix($this->cachePrefix); } if ($this->cacheDriver) { $builder->cacheDriver($this->cacheDriver); } if ($this->cacheUsePlainKey) { $builder->withPlainKey(); } return $builder->cacheBaseTags($this->getCacheBaseTags()); } /** * Set the base cache tags that will be present * on all queries. * * @return array */ protected function getCacheBaseTags(): array { return [ (string) static::class, ]; } }