diff --git a/app/Observers/ScopeObserver.php b/app/Observers/ScopeObserver.php new file mode 100644 index 00000000..38b5256d --- /dev/null +++ b/app/Observers/ScopeObserver.php @@ -0,0 +1,37 @@ +refreshCachedScopes(); + } + + /** + * Handle the Scope "deleted" event. + * + * @return void + */ + public function deleted() + { + $this->refreshCachedScopes(); + } + + protected function refreshCachedScopes() + { + Cache::forget('scopes'); + Cache::rememberForever('scopes', function () { + return Scope::pluck('description', 'name')->toArray(); + }); + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 3167c293..64773c06 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -2,8 +2,8 @@ namespace App\Providers; -use App\Models\Scope; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; +use Illuminate\Support\Facades\Cache; use Laravel\Passport\Passport; class AuthServiceProvider extends ServiceProvider @@ -45,7 +45,7 @@ class AuthServiceProvider extends ServiceProvider 'ReportsManagement.ReadWrite' => 'auth.oauth.scope.reports-management.readwrite', ]; - $scopes = Scope::all()->pluck('description', 'name')->all(); + $scopes = Cache::get('scopes', []); Passport::tokensCan(array_merge($defaultScopes, $scopes)); diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index cdde149c..deda6982 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -3,6 +3,8 @@ namespace App\Providers; use App\Listeners; +use App\Models\Scope; +use App\Observers\ScopeObserver; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; class EventServiceProvider extends ServiceProvider @@ -39,4 +41,14 @@ class EventServiceProvider extends ServiceProvider Listeners\SetAppLocale::class, ], ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + Scope::observe(ScopeObserver::class); + } }