https://github.com/innoge/laravel-policy-soft-cache
Enhance Laravel's authorization efficiency with soft caching for policy checks—boosting performance without affecting concurrent request integrity.
https://github.com/innoge/laravel-policy-soft-cache
cache laravel php policy
Last synced: 6 months ago
JSON representation
Enhance Laravel's authorization efficiency with soft caching for policy checks—boosting performance without affecting concurrent request integrity.
- Host: GitHub
- URL: https://github.com/innoge/laravel-policy-soft-cache
- Owner: InnoGE
- License: mit
- Created: 2022-11-01T17:54:56.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-04-15T12:42:54.000Z (about 1 year ago)
- Last Synced: 2025-10-17T12:42:05.352Z (8 months ago)
- Topics: cache, laravel, php, policy
- Language: PHP
- Homepage:
- Size: 42 KB
- Stars: 22
- Watchers: 1
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Laravel Policy Soft Cache Package
[](https://packagist.org/packages/innoge/laravel-policy-soft-cache)
[](https://github.com/InnoGE/laravel-policy-soft-cache/actions/workflows/run-tests.yml)
[](https://github.com/InnoGE/laravel-policy-soft-cache/actions/workflows/fix-php-code-style-issues.yml)
[](https://packagist.org/packages/innoge/laravel-policy-soft-cache)
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.
## Requirements
This package is compatible with ```Laravel 9, 10, 11, 12```, and PHP >= 8.1.
## Installation
You can install the package via composer:
```bash
composer require innoge/laravel-policy-soft-cache
```
You can publish the config file with:
```bash
php artisan vendor:publish --provider="Innoge\LaravelPolicySoftCache\LaravelPolicySoftCacheServiceProvider"
```
This is the contents of the published config file:
```php
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.
```.dotenv
CACHE_ALL_POLICIES=false
```
## Usage
By default, this package caches all policy calls of your entire application. You can disable this behavior by setting the ```cache_all_policies```configuration 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
{
...
}
```
## Clearing the cache
Sometimes you want to clear the policy cache after model changes. You can call the ```Innoge\LaravelPolicySoftCache::flushCache();``` method.
## Known Issues
### Gate::before and Service Provider Load Order
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.
#### Resolution Steps
To resolve this issue, follow these steps:
1. **Manual Service Provider Registration**: Add `\Innoge\LaravelPolicySoftCache\LaravelPolicySoftCacheServiceProvider::class` to the end of the `providers` array in your `config/app.php`. This manual registration ensures that the `LaravelPolicySoftCacheServiceProvider` loads after all other service providers, including `AuthServiceProvider`.
```php
'providers' => [
// Other Service Providers
\Innoge\LaravelPolicySoftCache\LaravelPolicySoftCacheServiceProvider::class,
],
```
2. **Disable Auto-Discovery for the Package**: To prevent Laravel's auto-discovery mechanism from automatically loading the service provider, add `innoge/laravel-policy-soft-cache` to the `dont-discover` array in your `composer.json`. This step is crucial for maintaining the manual load order.
```json
"extra": {
"laravel": {
"dont-discover": ["innoge/laravel-policy-soft-cache"]
}
},
```
3. **Reinstall Dependencies**: After updating your `composer.json`, run `composer install` to apply the changes. This step is necessary for the changes to take effect.
```bash
composer install
```
## Testing
```bash
composer test
```
## Changelog
Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
## Contributing
Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
## Security Vulnerabilities
Please review [our security policy](../../security/policy) on how to report security vulnerabilities.
## Credits
- [Tim Geisendörfer](https://github.com/geisi)
- [All Contributors](../../contributors)
## License
The MIT License (MIT). Please see [License File](LICENSE.md) for more information.