login($request); return self::success($res); } public function getPermissionInfo() { $permissionInfo = ['user' => null, 'roles' => [], 'permissions' => [], 'menus' => []]; // 1.1 获得用户信息 $user = request()->user(); if (!$user || $user->status !== 0) return self::success($permissionInfo); $permissionInfo['user'] = $user->only(['id', 'nickname', 'avatar']); // 1.2 获得角色列表 $roles = $user->roles()->where('status', 0)->get(); if (empty($roles)) return self::success($permissionInfo); $permissionInfo['roles'] = $roles->pluck('code'); // 1.3 获得菜单列表 $menus = Role::getMenus($roles->pluck('id')->all()); if ($menus->isEmpty()) return self::success($permissionInfo); // $allPermissions = $user->getAllPermissions(); // if (empty($allPermissions)) return self::success($permissionInfo); // 菜单树 // $menus = $allPermissions->where('status', 0)->whereIn('type', [1, 2])->whereIn('pivot.role_id', $roles->pluck('id'))->all(); // if (empty($menus)) return self::success($permissionInfo); $permissionInfo['menus'] = self::buildMenuTree($menus->whereIn('type', [1, 2])->all()); // 权限标识信息 dd($user->getAllPermissions()); $permissions = $user->getAllPermissions()->where('status', 0)->whereIn('pivot.role_id', $roles->pluck('id'))->whereNotNull('permission')->pluck('permission'); $permissionInfo['permissions'] = $permissions; return self::success($permissionInfo); } protected static function buildMenuTree(array $menuList) { // 移除按钮 $removeKeys = []; $menuList = collect($menuList); $menuList->each(function ($value, $key) use (&$removeKeys) { if ($value['type'] === 3) $removeKeys[] = $key; }); // 移除指定的项目 $menuList = $menuList->forget($removeKeys); // 排序,保证菜单的有序性 $menuList = $menuList->sortBy('sort'); // 构建菜单树 $menuMap = collect([]); $menuList->each(function ($value) use (&$menuMap) { $menuMap[$value['id']] = [ "id" => $value['id'], "parentId" => $value['parent_id'], "name" => $value['name'], "path" => $value['path'], "component" => $value['component'], "componentName" => $value['component_name'], "icon" => $value['icon'], "visible" => !!$value['visible'], "keepAlive" => !!$value['keep_alive'], "alwaysShow" => !!$value['always_show'], "children" => null ]; }); $menuMap->filter(function ($node) { if ($node['parentId'] !== 0) { return true; } return false; })->each(function ($childNode) use (&$menuMap) { // 获得父节点 $isExistKey = $menuMap->has($childNode['parentId']); if (!$isExistKey) { // LoggerFactory.getLogger(getClass()).error("[buildRouterTree][resource({}) 找不到父资源({})]", // childNode.getId(), childNode.getParentId()); return; } $parentNode = $menuMap[$childNode['parentId']]; // 将自己添加到父节点中 if (empty($parentNode['children'])) { $parentNode['children'] = []; } $parentNode['children'][] = $childNode; $menuMap[$childNode['parentId']] = $parentNode; }); // 获得到所有的根节点 return array_values($menuMap->filter(function ($node) { if ($node['parentId'] === 0) return true; return false; })->toArray()); } }