<?php namespace App\Http\Middleware; use Closure; class Menu { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $isApi = $request->ajax(); $user = $request->user; //处理权限和菜单 $permArr = config('perm.perm'); $action = $request->route('key'); empty($action) && $action = 'Dashboard'; //获取菜单 if (!$isApi) { $menuConfig = json_decode(curl($permArr['menuUrl'] . $permArr['menuId']), true); if (empty($menuConfig['data'])) { return $this->view('error', '菜单生成错误,请联系技术'); } else { $menuConfig = $menuConfig['data']; } $menusData = menu($menuConfig, $request->user->userId); $menus = !in_array($request->user->userId, $permArr['adminGroup']) ? $menusData : $menuConfig; if (empty($menus)) { return $this->view('Auth', '没有访问权限', $permArr['goUrl']); } //还要判断是否是基石的url,是的话,要返回绝对地址 $menus = $this->getAbsoluteUrl($menus); $request->menus = $menus; } if (!in_array($user->userId, $permArr['adminGroup']) && $action != 'Dashboard') {//不是超级管理员 $perm = perm($request->user->userId, $action); if ($perm !== true) { if ($isApi) { return apiReturn(10001, '没有权限'); } return $this->view('Auth', '没有访问权限', $permArr['goUrl']); } } return $next($request, $action); } //获取绝对地址,有一些是嵌入到其它系统内部的,所以要是外链地址 private function getAbsoluteUrl($menus) { foreach ($menus as &$menu) { foreach ($menu['childs'] as $k => &$v) { $href = $v['href']; $array = explode('/', $href); $routerName = end($array); $urls = config('website.AbsoluteUrls'); $v['href'] = !empty($urls[$routerName]) ? $urls[$routerName] : $v['href']; } } //添加固定死的外链 $urls = [ [ 'title' => '商机管理', 'href' => 'https://xinlian.ichunt.com', 'class' => '', 'target' => '_blank', 'childs' => [], ], [ 'title' => '询报价管理', 'href' => 'http://frq.ichunt.net/?jumpUrl=/index/dashboard', 'class' => '', 'target' => '_blank', 'childs' => [] ], [ 'title' => '数据流管理', 'href' => 'http://access.ichunt.net/web/board', 'class' => '', 'target' => '_blank', 'childs' => [] ], ]; $menus = array_merge($menus, $urls); return $menus; } private function view($errcode, $errinfo, $goUrl = '') { $data = [ 'errcode' => $errcode, 'errinfo' => $errinfo, 'url' => $goUrl ]; return view('errors.error', $data); } }