AuthController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. /**
  3. * @Name
  4. * @Description
  5. * @Author 刘学玺
  6. * @Date 2024/8/23 10:15
  7. */
  8. namespace App\Http\Controllers\Backend\Server\System;
  9. use App\Exceptions\ApiException;
  10. use App\Http\Controllers\Controller;
  11. use App\Http\Requests\Backend\Server\System\AuthRequest;
  12. use App\Http\Services\Backend\Server\System\AuthService;
  13. use App\Models\System\Menu;
  14. use App\Models\System\Role;
  15. use App\Models\System\User;
  16. use Illuminate\Http\JsonResponse;
  17. use Illuminate\Support\Arr;
  18. use function PHPUnit\Framework\isEmpty;
  19. class AuthController extends Controller
  20. {
  21. /**
  22. * @throws ApiException
  23. */
  24. public function login(AuthRequest $request): JsonResponse
  25. {
  26. // 处理首页逻辑
  27. $res = (new AuthService())->login($request);
  28. return self::success($res);
  29. }
  30. public function getPermissionInfo()
  31. {
  32. $permissionInfo = ['user' => null, 'roles' => [], 'permissions' => [], 'menus' => []];
  33. // 1.1 获得用户信息
  34. $user = request()->user();
  35. if (!$user || $user->status !== 0) return self::success($permissionInfo);
  36. $permissionInfo['user'] = $user->only(['id', 'nickname', 'avatar']);
  37. // 1.2 获得角色列表
  38. $roles = $user->roles()->where('status', 0)->get();
  39. if (empty($roles)) return self::success($permissionInfo);
  40. $permissionInfo['roles'] = $roles->pluck('code');
  41. // 1.3 获得菜单列表
  42. $menus = Role::getMenus($roles->pluck('id')->all());
  43. if ($menus->isEmpty()) return self::success($permissionInfo);
  44. // $allPermissions = $user->getAllPermissions();
  45. // if (empty($allPermissions)) return self::success($permissionInfo);
  46. // 菜单树
  47. // $menus = $allPermissions->where('status', 0)->whereIn('type', [1, 2])->whereIn('pivot.role_id', $roles->pluck('id'))->all();
  48. // if (empty($menus)) return self::success($permissionInfo);
  49. $permissionInfo['menus'] = self::buildMenuTree($menus->whereIn('type', [1, 2])->all());
  50. // 权限标识信息
  51. dd($user->getAllPermissions());
  52. $permissions = $user->getAllPermissions()->where('status', 0)->whereIn('pivot.role_id', $roles->pluck('id'))->whereNotNull('permission')->pluck('permission');
  53. $permissionInfo['permissions'] = $permissions;
  54. return self::success($permissionInfo);
  55. }
  56. protected static function buildMenuTree(array $menuList)
  57. {
  58. // 移除按钮
  59. $removeKeys = [];
  60. $menuList = collect($menuList);
  61. $menuList->each(function ($value, $key) use (&$removeKeys) {
  62. if ($value['type'] === 3) $removeKeys[] = $key;
  63. });
  64. // 移除指定的项目
  65. $menuList = $menuList->forget($removeKeys);
  66. // 排序,保证菜单的有序性
  67. $menuList = $menuList->sortBy('sort');
  68. // 构建菜单树
  69. $menuMap = collect([]);
  70. $menuList->each(function ($value) use (&$menuMap) {
  71. $menuMap[$value['id']] = [
  72. "id" => $value['id'],
  73. "parentId" => $value['parent_id'],
  74. "name" => $value['name'],
  75. "path" => $value['path'],
  76. "component" => $value['component'],
  77. "componentName" => $value['component_name'],
  78. "icon" => $value['icon'],
  79. "visible" => !!$value['visible'],
  80. "keepAlive" => !!$value['keep_alive'],
  81. "alwaysShow" => !!$value['always_show'],
  82. "children" => null
  83. ];
  84. });
  85. $menuMap->filter(function ($node) {
  86. if ($node['parentId'] !== 0) {
  87. return true;
  88. }
  89. return false;
  90. })->each(function ($childNode) use (&$menuMap) {
  91. // 获得父节点
  92. $isExistKey = $menuMap->has($childNode['parentId']);
  93. if (!$isExistKey) {
  94. // LoggerFactory.getLogger(getClass()).error("[buildRouterTree][resource({}) 找不到父资源({})]",
  95. // childNode.getId(), childNode.getParentId());
  96. return;
  97. }
  98. $parentNode = $menuMap[$childNode['parentId']];
  99. // 将自己添加到父节点中
  100. if (empty($parentNode['children'])) {
  101. $parentNode['children'] = [];
  102. }
  103. $parentNode['children'][] = $childNode;
  104. $menuMap[$childNode['parentId']] = $parentNode;
  105. });
  106. // 获得到所有的根节点
  107. return array_values($menuMap->filter(function ($node) {
  108. if ($node['parentId'] === 0) return true;
  109. return false;
  110. })->toArray());
  111. }
  112. }