Handler.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Application.Abstractions.Identity;
  2. using SharedKernel.Constants;
  3. using MediatR;
  4. using System.Data;
  5. namespace Application.Features.Director.GetRolePermissions
  6. {
  7. public sealed class Handler(IIdentityRoleReader roleReader) : IRequestHandler<GetRoleClaimsQuery, Response>
  8. {
  9. public async Task<Response> Handle(GetRoleClaimsQuery request, CancellationToken ct)
  10. {
  11. var roleAndClaims = await roleReader.GetRoleAsync(request.RoleID, ct);
  12. if (roleAndClaims is null)
  13. {
  14. throw new DataException($"Role with ID '{request.RoleID}' not found.");
  15. }
  16. string[] DefaultActions = { "Create", "View", "Edit", "Delete" };
  17. var groups = new List<Response.PermissionGroup>();
  18. var menus = Menus.GetMenus();
  19. void Traverse(Menu menu, string? parentName = null)
  20. {
  21. var fullGroupName = string.IsNullOrWhiteSpace(parentName) ? menu.Name : $"{parentName} - {menu.Name}";
  22. var fullName = string.IsNullOrWhiteSpace(parentName) ? $"{menu.Name}.{menu.Id}" : $"{parentName} - {menu.Name}.{menu.Id}";
  23. // 권한 그룹 생성
  24. if (!string.IsNullOrWhiteSpace(menu.Path) || (menu.Children != null && menu.Children.Count > 0))
  25. {
  26. groups.Add(new Response.PermissionGroup
  27. {
  28. GroupName = fullGroupName,
  29. Permissions = [..DefaultActions.Select(action =>
  30. {
  31. var permission = $"Permissions.{fullName}.{action}";
  32. return new Response.PermissionGroup.Checkbox {
  33. DisplayValue = permission,
  34. IsSelected = roleAndClaims.Claims.Contains(permission)
  35. };
  36. })]
  37. });
  38. }
  39. if (menu.Children != null)
  40. {
  41. foreach (var child in menu.Children)
  42. {
  43. Traverse(child, menu.Name);
  44. }
  45. }
  46. }
  47. foreach (var menu in menus)
  48. {
  49. Traverse(menu);
  50. }
  51. return new Response {
  52. RoleID = roleAndClaims.ID,
  53. RoleName = roleAndClaims.Name,
  54. RoleClaims = groups
  55. };
  56. }
  57. }
  58. }