LayoutDataProvider.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using SharedKernel;
  2. using SharedKernel.Constants;
  3. using Microsoft.AspNetCore.Authorization;
  4. using Microsoft.Extensions.Options;
  5. using Microsoft.AspNetCore.Identity;
  6. using Infrastructure.Persistence.Identity;
  7. using System.Security.Claims;
  8. namespace Admin.Pages.Shared.Layout;
  9. public class LayoutDataProvider : ILayoutDataProvider
  10. {
  11. private readonly AppSettings _settings;
  12. private readonly IAuthorizationService _authorizationService;
  13. private readonly UserManager<ApplicationUser> _userManager;
  14. public LayoutDataProvider(IOptions<AppSettings> options, IAuthorizationService authorizationService, UserManager<ApplicationUser> userManager)
  15. {
  16. _settings = options.Value;
  17. _authorizationService = authorizationService;
  18. _userManager = userManager;
  19. }
  20. public async Task<LayoutViewModel> CreateAsync(HttpContext context)
  21. {
  22. var principal = context.User;
  23. var appUser = await _userManager.GetUserAsync(principal);
  24. // Identity 권한/역할 기반 메뉴 필터링
  25. var filteredMenus = await Menus.FilterForUserAsync(principal, _authorizationService);
  26. return new LayoutViewModel
  27. {
  28. UserName = appUser?.UserName ?? appUser?.Email ?? principal.Identity?.Name ?? string.Empty,
  29. Role = principal.FindFirst(ClaimTypes.Role)?.Value ?? principal.FindFirst("role")?.Value ?? string.Empty,
  30. AppSettings = _settings,
  31. Menus = filteredMenus
  32. };
  33. }
  34. }