AppServiceProvider.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace App\Providers;
  3. /*
  4. * AppServiceProvider — View Composer для siteSettings + Gate-регистрация прав доступа.
  5. *
  6. * Gates регистрируются для всех ключей PermissionService::keys().
  7. * В Blade: @can('cars.edit') ... @endcan
  8. * В контроллерах: $this->authorize('cars.edit')
  9. * В AdminLTE меню: 'can' => 'cars.view' (GateFilter включён по умолчанию)
  10. */
  11. use App\Models\Setting;
  12. use App\Models\User;
  13. use App\Services\PermissionService;
  14. use Illuminate\Support\Facades\Gate;
  15. use Illuminate\Support\Facades\View;
  16. use Illuminate\Support\ServiceProvider;
  17. class AppServiceProvider extends ServiceProvider
  18. {
  19. public function register(): void {}
  20. public function boot(): void
  21. {
  22. // View Composer: настройки сайта в layout, шапке, подвале и страницах каталога
  23. View::composer(
  24. [
  25. 'layouts.app',
  26. 'layouts.partials._header',
  27. 'layouts.partials._footer',
  28. 'pages.catalog',
  29. 'pages.car',
  30. ],
  31. function ($view) {
  32. $view->with('siteSettings', Setting::all());
  33. }
  34. );
  35. // Gates: регистрируем gate для каждого ключа разрешения
  36. foreach (PermissionService::keys() as $permission) {
  37. Gate::define($permission, function (User $user) use ($permission) {
  38. return $user->hasPermission($permission);
  39. });
  40. }
  41. }
  42. }