item(WorkspaceOverview::navigationItem()) ->groups([ NavigationGroup::make(__('localization.navigation.monitoring')) ->items($this->visibleItems([ NavigationItem::make(FindingExceptionsQueue::getNavigationLabel()) ->url(fn (): string => FindingExceptionsQueue::getUrl(panel: 'admin')) ->icon(FindingExceptionsQueue::getNavigationIcon()) ->visible(fn (): bool => FindingExceptionsQueue::canAccess()), NavigationItem::make(__('localization.navigation.operations')) ->url(fn (): string => OperationRunLinks::index()) ->icon('heroicon-o-queue-list') ->visible(fn (): bool => true), NavigationItem::make(__('localization.navigation.alerts')) ->url(fn (): string => route('filament.admin.alerts')) ->icon('heroicon-o-bell-alert') ->visible(fn (): bool => Alerts::canAccess()) ->childItems($this->visibleItems([ NavigationItem::make(AlertDestinationResource::getNavigationLabel()) ->url(fn (): string => AlertDestinationResource::getUrl(panel: 'admin')) ->icon(AlertDestinationResource::getNavigationIcon()) ->visible(fn (): bool => AlertDestinationResource::canViewAny()), NavigationItem::make(AlertRuleResource::getNavigationLabel()) ->url(fn (): string => AlertRuleResource::getUrl(panel: 'admin')) ->icon(AlertRuleResource::getNavigationIcon()) ->visible(fn (): bool => AlertRuleResource::canViewAny()), NavigationItem::make(AlertDeliveryResource::getNavigationLabel()) ->url(fn (): string => AlertDeliveryResource::getUrl(panel: 'admin')) ->icon(AlertDeliveryResource::getNavigationIcon()) ->visible(fn (): bool => AlertDeliveryResource::canViewAny()), ])), NavigationItem::make(__('localization.navigation.audit_log')) ->url(fn (): string => route('admin.monitoring.audit-log')) ->icon('heroicon-o-clipboard-document-list'), ])), NavigationGroup::make(__('localization.review.reporting')) ->items($this->visibleItems([ NavigationItem::make(ReviewRegister::getNavigationLabel()) ->url(fn (): string => ReviewRegister::getUrl(panel: 'admin')) ->icon(ReviewRegister::getNavigationIcon()), NavigationItem::make(CustomerReviewWorkspace::getNavigationLabel()) ->url(fn (): string => CustomerReviewWorkspace::getUrl(panel: 'admin')) ->icon(CustomerReviewWorkspace::getNavigationIcon()), ])), NavigationGroup::make(__('localization.navigation.settings')) ->items($this->visibleItems([ NavigationItem::make(__('localization.navigation.manage_workspaces')) ->url(fn (): string => route('filament.admin.resources.workspaces.index')) ->icon(WorkspaceResource::getNavigationIcon()) ->visible(fn (): bool => $this->canManageWorkspaces()), NavigationItem::make(__('localization.navigation.integrations')) ->url(fn (): string => ProviderConnectionResource::getUrl('index', panel: 'admin')) ->icon(ProviderConnectionResource::getNavigationIcon()) ->visible(fn (): bool => ProviderConnectionResource::canViewAny()) ->childItems($this->visibleItems([ NavigationItem::make(ProviderConnectionResource::getNavigationLabel()) ->url(fn (): string => ProviderConnectionResource::getUrl('index', panel: 'admin')) ->icon(ProviderConnectionResource::getNavigationIcon()) ->visible(fn (): bool => ProviderConnectionResource::canViewAny()), ])), NavigationItem::make(__('localization.navigation.settings')) ->url(fn (): string => WorkspaceSettings::getUrl(panel: 'admin')) ->icon('heroicon-o-cog-6-tooth') ->visible(fn (): bool => $this->canViewWorkspaceSettings()), ])), NavigationGroup::make(__('localization.navigation.governance')) ->items($this->visibleItems([ NavigationItem::make(GovernanceInbox::getNavigationLabel()) ->url(fn (): string => GovernanceInbox::getUrl(panel: 'admin')) ->icon(GovernanceInbox::getNavigationIcon()), NavigationItem::make(DecisionRegister::getNavigationLabel()) ->url(fn (): string => DecisionRegister::getUrl(panel: 'admin')) ->icon(DecisionRegister::getNavigationIcon()) ->visible(fn (): bool => DecisionRegister::canAccess()), ])), ]); } /** * @param array $items * @return array */ private function visibleItems(array $items): array { return array_values(array_filter( $items, static fn (NavigationItem $item): bool => $item->isVisible(), )); } private function canManageWorkspaces(): bool { $user = auth()->user(); if (! $user instanceof User) { return false; } $roles = WorkspaceRoleCapabilityMap::rolesWithCapability(Capabilities::WORKSPACE_MEMBERSHIP_MANAGE); return WorkspaceMembership::query() ->where('user_id', (int) $user->getKey()) ->whereIn('role', $roles) ->exists(); } private function canViewWorkspaceSettings(): bool { $user = auth()->user(); if (! $user instanceof User) { return false; } $workspaceId = app(WorkspaceContext::class)->currentWorkspaceId(request()); if (! is_int($workspaceId)) { return false; } $workspace = Workspace::query()->whereKey($workspaceId)->first(); if (! $workspace instanceof Workspace) { return false; } $resolver = app(WorkspaceCapabilityResolver::class); return $resolver->isMember($user, $workspace) && $resolver->can($user, $workspace, Capabilities::WORKSPACE_SETTINGS_VIEW); } }