self::FALLBACK_ROUTE, 'role' => null, 'role_slug' => null, 'roles' => [], ]; } $currentRole = strtolower(trim((string) session('role', ''))); $roles = $user->roles() ->pluck('roles.name') ->map(fn ($name) => strtolower((string) $name)) ->toArray(); if (empty($roles)) { Log::warning('Dashboard route requested with no roles assigned.', [ 'user_id' => $user->id, ]); return [ 'route' => self::FALLBACK_ROUTE, 'role' => null, 'role_slug' => null, 'roles' => [], ]; } $lookupRoles = $roles; if ($currentRole !== '' && in_array($currentRole, $roles, true)) { $lookupRoles = [$currentRole]; } $rows = Role::findByNamesOrSlugs($lookupRoles); if (! empty($rows)) { $role = $rows[0]; $route = $role->dashboard_route ?: self::FALLBACK_ROUTE; return [ 'route' => $route, 'role' => $role->name ?? null, 'role_slug' => $role->slug ?? null, 'roles' => $roles, 'current_role' => $currentRole !== '' ? $currentRole : null, ]; } Log::warning('No matching role dashboard route found.', [ 'user_id' => $user->id, 'roles' => $roles, ]); return [ 'route' => self::FALLBACK_ROUTE, 'role' => null, 'role_slug' => null, 'roles' => $roles, 'current_role' => $currentRole !== '' ? $currentRole : null, ]; } }