getApp(); $controller = request()->getController(); $action = request()->getAction(); $AdminLogin = request()->session()->get('AdminLogin'); if (!isset($AdminLogin['id']) && strtolower($controller) !== 'login') { return redirect(url('/login/index')); } $method = '/' . $controller. '/' .$action; if (!in_array($method, $this->noNeedAuth) && !in_array('*', $this->noNeedAuth)) { if (!Auth::instance()->SuperAdmin() && !Auth::instance()->check($method, $AdminLogin['id'])) { if (request()->isAjax()) { return json(['code' => 101, 'msg' => '没有权限']); } else { return $this->abortPage('没有权限!', 401); } } } /** * 分发请求 * 控制器中间件 */ $id = input('id'); if (\request()->isPost()) { if ($controller == 'system/Admin') { if ($data = AdminModel::getById($id)) { $group_id = input('group_id'); $group_id = !empty($group_id) ? $group_id . ',' . $data['group_id'] : $data['group_id']; $group_id = array_unique(explode(',', $group_id)); if (!Auth::instance()->checkRulesForGroup($group_id)) { return json(ResultCode::AUTH_ERROR); } } } else if ($controller == 'system/AdminGroup') { if (!empty($id) && $id >= 1) { if (!Auth::instance()->checkRulesForGroup((array)$id)) { return json(ResultCode::AUTH_ERROR); } } } } View::assign('app', $app); View::assign('controller', $controller); View::assign('action', $action); View::assign('AdminLogin', $AdminLogin); $this->writeAdminRequestLogs(); return $handler($request); } /** * 写入后台操作日志 * @return void * @throws InvalidArgumentException * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ public function writeAdminRequestLogs() { if (saenv('system_logs')) { $actionLogs = [ 'module' => request()->app, 'controller' => request()->controller, 'action' => request()->action, 'params' => serialize(request()->all()), 'method' => request()->method(), 'code' => 200, 'url' => request()->url(), 'ip' => request()->getRemoteIp(), 'name' => session('AdminLogin.name'), ]; if (empty($actionLogs['name'])) { $actionLogs['name'] = 'system'; } $actionLogs['type'] = 2; SystemLog::write($actionLogs); } } /** * 错误页面 * @param int $code * @param string $msg * @return \support\Response */ public function abortPage(string $msg = '', int $code = 404): Response { $exception = config('app.exception_template'); if (isset($exception[$code])) { $template = @file_get_contents($exception[$code]); } else { $template = $msg; } return \response($template, $code); } }