AppServiceProvider.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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._head_meta',
  27. 'layouts.partials._header',
  28. 'layouts.partials._footer',
  29. 'pages.catalog',
  30. 'pages.car',
  31. ],
  32. function ($view) {
  33. $view->with('siteSettings', Setting::all());
  34. }
  35. );
  36. // Gates: регистрируем gate для каждого ключа разрешения
  37. foreach (PermissionService::keys() as $permission) {
  38. Gate::define($permission, function (User $user) use ($permission) {
  39. return $user->hasPermission($permission);
  40. });
  41. }
  42. }
  43. }