LayoutDataProvider.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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. {
  10. public class LayoutDataProvider : ILayoutDataProvider
  11. {
  12. private readonly AppSettings _settings;
  13. private readonly IAuthorizationService _authorizationService;
  14. private readonly UserManager<ApplicationUser> _userManager;
  15. public LayoutDataProvider(IOptions<AppSettings> options, IAuthorizationService authorizationService, UserManager<ApplicationUser> userManager)
  16. {
  17. _settings = options.Value;
  18. _authorizationService = authorizationService;
  19. _userManager = userManager;
  20. }
  21. public async Task<LayoutViewModel> CreateAsync(HttpContext context)
  22. {
  23. var principal = context.User;
  24. var appUser = await _userManager.GetUserAsync(principal);
  25. // Identity 권한/역할 기반 메뉴 필터링
  26. var filteredMenus = await Menus.FilterForUserAsync(principal, _authorizationService);
  27. return new LayoutViewModel
  28. {
  29. UserName = appUser?.UserName ?? appUser?.Email ?? principal.Identity?.Name ?? string.Empty,
  30. Role = principal.FindFirst(ClaimTypes.Role)?.Value ?? principal.FindFirst("role")?.Value ?? string.Empty,
  31. AppSettings = _settings,
  32. Menus = filteredMenus
  33. };
  34. }
  35. }
  36. }