123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <?php
- /**
- * @Name
- * @Description
- * @Author 刘学玺
- * @Date 2024/8/23 10:15
- */
- namespace App\Http\Controllers\Backend\Server\System;
- use App\Exceptions\ApiException;
- use App\Http\Controllers\Controller;
- use App\Http\Requests\Backend\Server\System\AuthRequest;
- use App\Http\Services\Backend\Server\System\AuthService;
- use App\Models\System\Menu;
- use App\Models\System\Role;
- use App\Models\System\User;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Support\Arr;
- use Illuminate\Support\Facades\Auth;
- use function PHPUnit\Framework\isEmpty;
- class AuthController extends Controller
- {
- /**
- * @throws ApiException
- */
- public function login(AuthRequest $request): JsonResponse
- {
- // 处理首页逻辑
- $res = (new AuthService())->login($request);
- return self::success($res);
- }
- public function getPermissionInfo()
- {
- $permissionInfo = ['user' => null, 'roles' => [], 'permissions' => [], 'menus' => []];
- // 1.1 获得用户信息
- $user = Auth::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->toArray());
- // 权限标识信息
- $permissions = $user->getAllPermissions()->whereIn('pivot.role_id', $roles->pluck('id'))->pluck('name');
- $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());
- }
- }
|