Menu.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. declare (strict_types=1);
  3. namespace app\controller;
  4. use app\BaseController;
  5. use app\service\MenuService;
  6. use think\facade\Request;
  7. class Menu extends BaseController
  8. {
  9. /**
  10. * 获取用户菜单树
  11. */
  12. public function getMenuTree()
  13. {
  14. $loginInfo = checkUserLogin();
  15. if (!$loginInfo) {
  16. return json_error([], '请先登录');
  17. }
  18. try {
  19. $menuTree = MenuService::getMenuTree($loginInfo);
  20. return json_success($menuTree, '获取菜单成功');
  21. } catch (\Exception $e) {
  22. return json_error([], '获取菜单失败:' . $e->getMessage());
  23. }
  24. }
  25. /**
  26. * 获取面包屑导航
  27. */
  28. public function getBreadcrumb()
  29. {
  30. $loginInfo = checkUserLogin();
  31. if (!$loginInfo) {
  32. return json_error([], '请先登录');
  33. }
  34. $menuId = Request::get('menu_id', 0, 'intval');
  35. if (!$menuId) {
  36. return json_error([], '菜单ID不能为空');
  37. }
  38. try {
  39. $breadcrumb = MenuService::getBreadcrumb($menuId);
  40. return json_success($breadcrumb, '获取面包屑导航成功');
  41. } catch (\Exception $e) {
  42. return json_error([], '获取面包屑导航失败:' . $e->getMessage());
  43. }
  44. }
  45. /**
  46. * 获取所有控制器权限配置(用于角色权限分配)
  47. */
  48. public function getControllerPermissions()
  49. {
  50. $loginInfo = checkUserLogin();
  51. if (!$loginInfo) {
  52. return json_error([], '请先登录');
  53. }
  54. // 检查是否有查看权限配置的权限
  55. if (!checkPermission($loginInfo, 'Permission', 'list')) {
  56. return json_error([], '没有查看权限配置的权限');
  57. }
  58. try {
  59. $permissions = MenuService::getControllerPermissions();
  60. return json_success($permissions, '获取权限配置成功');
  61. } catch (\Exception $e) {
  62. return json_error([], '获取权限配置失败:' . $e->getMessage());
  63. }
  64. }
  65. /**
  66. * 根据控制器检查菜单权限
  67. */
  68. public function checkMenuPermission()
  69. {
  70. $loginInfo = checkUserLogin();
  71. if (!$loginInfo) {
  72. return json_error([], '请先登录');
  73. }
  74. $controller = Request::get('controller', '', 'trim');
  75. $action = Request::get('action', '', 'trim');
  76. if (empty($controller)) {
  77. return json_error([], '控制器名称不能为空');
  78. }
  79. $hasPermission = false;
  80. if (empty($action)) {
  81. // 只检查控制器权限
  82. $hasPermission = checkPermission($loginInfo, $controller, 'list');
  83. } else {
  84. // 检查具体操作权限
  85. $hasPermission = checkPermission($loginInfo, $controller, $action);
  86. }
  87. return json_success([
  88. 'has_permission' => $hasPermission,
  89. 'controller' => $controller,
  90. 'action' => $action
  91. ], $hasPermission ? '有权限访问' : '无权限访问');
  92. }
  93. }