*/ public function share(Request $request): array { $user = $request->user(); return [ ...parent::share($request), 'name' => config('app.name'), 'appearance' => $request->attributes->get('appearance', 'system'), 'localization' => [ 'locale' => app()->getLocale(), 'timeZone' => config('app.timezone'), ], 'auth' => [ 'permissions' => [ 'canManageTeams' => $user !== null && ($this->permissionService->canManageAnyTeam($user) || $this->permissionService->allows($user, Permission::TeamCreate)), 'globalAdmin' => $user !== null && $this->permissionService->allows($user, Permission::GlobalAdmin), 'projectCreate' => $user !== null && $this->permissionService->allows($user, Permission::ProjectCreate), ], 'user' => $user, ], 'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true', 'navigation' => fn (): array => [ 'project' => $this->projectNavigation($request), ], ]; } /** * @return array{id: int, name: string, key: string, canManage: bool, canCreateTickets: bool}|null */ private function projectNavigation(Request $request): ?array { $project = $request->route('project'); $user = $request->user(); if (! $project instanceof Project || $user === null) { return null; } $permissions = $this->permissionService->effectivePermissions($user, $project); if (! in_array(Permission::ProjectRead, $permissions, true)) { return null; } return [ 'id' => $project->id, 'name' => $project->name, 'key' => $project->key, 'canManage' => in_array(Permission::ProjectAdmin, $permissions, true), 'canCreateTickets' => in_array(Permission::ProjectWrite, $permissions, true), ]; } }