Permissions.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using bitforum.Constants;
  2. using System.IO;
  3. using System.Security;
  4. namespace bitforum.Models
  5. {
  6. public static class Permissions
  7. {
  8. public static List<string> GeneratePermissionsForMenu(Menu menu, string? parentName = null)
  9. {
  10. var permissions = new List<string>();
  11. // 상위 메뉴 이름과 현재 메뉴 이름을 조합
  12. var fullName = string.IsNullOrWhiteSpace(parentName) ? $"{menu.Name}.{menu.Id}" : $"{parentName} - {menu.Name}.{menu.Id}";
  13. // 하위 메뉴가 있는 경우 재귀적으로 권한 생성
  14. if (menu.Children != null && menu.Children.Any())
  15. {
  16. if (menu.Path is not null)
  17. {
  18. permissions.Add($"Permissions.{fullName}.Create");
  19. permissions.Add($"Permissions.{fullName}.View");
  20. permissions.Add($"Permissions.{fullName}.Edit");
  21. permissions.Add($"Permissions.{fullName}.Delete");
  22. }
  23. foreach (var child in menu.Children)
  24. {
  25. permissions.AddRange(GeneratePermissionsForMenu(child, menu.Name));
  26. }
  27. }
  28. else
  29. {
  30. permissions = new List<string>()
  31. {
  32. $"Permissions.{fullName}.Create",
  33. $"Permissions.{fullName}.View",
  34. $"Permissions.{fullName}.Edit",
  35. $"Permissions.{fullName}.Delete",
  36. };
  37. }
  38. return permissions;
  39. }
  40. public static List<string> GeneratePermissions()
  41. {
  42. var allPermissions = new List<string>();
  43. var menus = MenuData.GetMenus();
  44. foreach (var menu in menus)
  45. {
  46. allPermissions.AddRange(GeneratePermissionsForMenu(menu));
  47. }
  48. return allPermissions;
  49. }
  50. }
  51. }