Optimize your Laravel application's performance with soft caching for policy checks. This package caches policy invocations to prevent redundant checks within the same request lifecycle, enhancing your application's response times.
This package is compatible with Laravel 9, 10, 11, 12, and PHP >= 8.1.
You can install the package via composer:
composer require innoge/laravel-policy-soft-cacheYou can publish the config file with:
php artisan vendor:publish --provider="Innoge\LaravelPolicySoftCache\LaravelPolicySoftCacheServiceProvider"This is the contents of the published config file:
return [
/*
* When enabled, the package will cache the results of all Policies in your Laravel application
*/
'cache_all_policies' => env('CACHE_ALL_POLICIES', true),
];You can also use CACHE_ALL_POLICIES in your .env file to change it.
CACHE_ALL_POLICIES=false
By default, this package caches all policy calls of your entire application. You can disable this behavior by setting the cache_all_policiesconfiguration to false. Now you can specify which Policy classes should be soft cached and which not. If you want your policy to be cached, add the Innoge\LaravelPolicySoftCache\Contracts\SoftCacheable interface.
For Example:
use Innoge\LaravelPolicySoftCache\Contracts\SoftCacheable;
class UserPolicy implements SoftCacheable
{
...
}
Sometimes you want to clear the policy cache after model changes. You can call the Innoge\LaravelPolicySoftCache::flushCache(); method.
When the innoge/laravel-policy-soft-cache package is installed in an application that utilizes Gate::before, typically defined in the AuthServiceProvider, a conflict may arise due to the order in which service providers are loaded.
To resolve this issue, follow these steps:
-
Manual Service Provider Registration: Add
\Innoge\LaravelPolicySoftCache\LaravelPolicySoftCacheServiceProvider::classto the end of theprovidersarray in yourconfig/app.php. This manual registration ensures that theLaravelPolicySoftCacheServiceProviderloads after all other service providers, includingAuthServiceProvider.'providers' => [ // Other Service Providers \Innoge\LaravelPolicySoftCache\LaravelPolicySoftCacheServiceProvider::class, ],
-
Disable Auto-Discovery for the Package: To prevent Laravel's auto-discovery mechanism from automatically loading the service provider, add
innoge/laravel-policy-soft-cacheto thedont-discoverarray in yourcomposer.json. This step is crucial for maintaining the manual load order."extra": { "laravel": { "dont-discover": ["innoge/laravel-policy-soft-cache"] } },
-
Reinstall Dependencies: After updating your
composer.json, runcomposer installto apply the changes. This step is necessary for the changes to take effect.composer install
composer testPlease see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.