50 lines
1.7 KiB
C#
50 lines
1.7 KiB
C#
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<NavResponseDto> 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
|
|
};
|
|
}
|
|
}
|
|
}
|