using Fitness_core_BE.DTOs.Rbac; using Fitness_core_BE.Interfaces; using Fitness_core_BE.Interfaces.Services; namespace Fitness_core_BE.Services { public class NavigationService : INavigationService { private readonly IPermissionService _permissionService; private readonly INavItemRepository _navItemRepository; public NavigationService( IPermissionService permissionService, INavItemRepository navItemRepository) { _permissionService = permissionService; _navItemRepository = navItemRepository; } public async Task GetNavigationAsync(HttpContext httpContext) { var permissionContext = await _permissionService.GetPermissionContextAsync(httpContext); var allItems = await _navItemRepository.GetActiveNavItemsOrdered(); var visibleItems = allItems .Where(item => item.Key == "dashboard" || permissionContext.IsOwner || permissionContext.AllowedNavKeys.Contains(item.Key)) .Where(item => !item.IsOwnerOnly || permissionContext.IsOwner) .Select(item => new NavItemDto { Key = item.Key, Label = item.Label, ShortLabel = item.ShortLabel, Href = item.Href, Icon = item.Icon }) .ToList(); return new NavResponseDto { IsOwner = permissionContext.IsOwner, Items = visibleItems }; } } }