app->environment() !== 'local') { URL::forceScheme('https'); } $this->configureAuthorization(); $this->configureDefaults(); } /** * Configure authorization behaviors. */ protected function configureAuthorization(): void { Relation::enforceMorphMap([ 'project' => Project::class, 'team' => Team::class, 'user' => User::class, ]); /** @var PermissionService $permissionService */ $permissionService = $this->app->make(PermissionService::class); Gate::define('access-admin', fn (User $user): bool => $permissionService->allows($user, Permission::GlobalAdmin)); Gate::define('create-project', fn (User $user): bool => $permissionService->allows($user, Permission::ProjectCreate)); Gate::define('manage-teams', fn (User $user): bool => $permissionService->canManageAnyTeam($user)); } /** * Configure default behaviors for production-ready applications. */ protected function configureDefaults(): void { Date::use(CarbonImmutable::class); DB::prohibitDestructiveCommands( app()->isProduction(), ); Password::defaults(fn (): ?Password => app()->isProduction() ? Password::min(12) ->mixedCase() ->letters() ->numbers() ->symbols() ->uncompromised() : null, ); } }