From 815977cfb3d4562348b2b16ec1d4b62791913ff7 Mon Sep 17 00:00:00 2001 From: suyi Date: Sat, 16 Nov 2024 13:21:45 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/app/adminapi/listener/OperationLog.php | 25 ++++++++++++++----- .../http/middleware/AllowMiddleware.php | 19 +++++--------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/server/app/adminapi/listener/OperationLog.php b/server/app/adminapi/listener/OperationLog.php index 129fa00..d1ebb38 100644 --- a/server/app/adminapi/listener/OperationLog.php +++ b/server/app/adminapi/listener/OperationLog.php @@ -5,6 +5,7 @@ namespace app\adminapi\listener; use ReflectionClass; +use support\Log; use Webman\Http\Request; use think\Exception; use Webman\Http\Response; @@ -14,7 +15,7 @@ class OperationLog /** * @notes 管理员操作日志 * @param $response - * @return bool|void + * @return bool * @throws \ReflectionException * @author bingo * @date 2022/4/8 17:09 @@ -23,12 +24,12 @@ class OperationLog { //需要登录的接口,无效访问时不记录 if (!$request->controllerObject||!$request->controllerObject->isNotNeedLogin($request->action) && empty($request->adminInfo)) { - return; + return false; } $pathLower = strtolower($request->path()); //不记录日志操作 if (str_contains($pathLower,"/api/")||$pathLower === '/adminapi/setting/system/log') { - return; + return false; } //获取操作注解 @@ -70,10 +71,22 @@ class OperationLog $systemLog->action = $notes; $systemLog->account = $request->adminInfo['account'] ?? ''; $systemLog->url = $request->path(); - $systemLog->type = $request->method() ? 'GET' : 'POST'; + $systemLog->type = $request->method(); $systemLog->params = json_encode($params, true); $systemLog->ip = getRealIP(); - $systemLog->result = $response->rawBody(); - return $systemLog->save(); + $result = 0; + // 正则表达式匹配指定key的值 + preg_match('/"code":\s*"([^"]+)"/', $response->rawBody(), $matches); + if (isset($matches[1])) { + $result = $matches[1]; + } + $systemLog->result = $result; + $res = $systemLog->save(); + Log::info("SystemLog id=".$systemLog->id. + ' adminId='.$systemLog->admin_id. + ' 请求地址:`'.$systemLog->url.'`'. + ' 请求参数:`'.$systemLog->params."`". + ' 返回结果:`'.$response->rawBody()."`"); + return $res; } } \ No newline at end of file diff --git a/server/app/common/http/middleware/AllowMiddleware.php b/server/app/common/http/middleware/AllowMiddleware.php index 0853ab4..af4be6e 100644 --- a/server/app/common/http/middleware/AllowMiddleware.php +++ b/server/app/common/http/middleware/AllowMiddleware.php @@ -46,12 +46,15 @@ class AllowMiddleware implements MiddlewareInterface $response = response(''); }else{ $response = $handler($request); + //创建一个纤程任务记录日志 try{ - $fiber = (new Fiber(function() use ($request, $response): bool{ - return $this->taskLog($request,$response); + $fiber = (new Fiber(function() use ($request, $response): void{ + OperationLog::handle($request,$response); })); $fiber->start(); - }catch (\Exception|\Throwable $e){} + }catch (\Exception|\Throwable $e){ + Log::error('请求日志记录失败:'.$e->getMessage()); + } } // 给响应添加跨域相关的http头 @@ -64,14 +67,4 @@ class AllowMiddleware implements MiddlewareInterface ]); return $response; } - public function taskLog($request,$response): bool - { - try{ - OperationLog::handle($request,$response); - }catch (\Exception $e){ - Log::info('请求日志记录失败:'.$e->getMessage()); - return false; - } - return true; - } } \ No newline at end of file -- Gitee From b9a6bfc32c8f5f07747905fcf415b7fd5c4a55b6 Mon Sep 17 00:00:00 2001 From: suyi Date: Sat, 16 Nov 2024 13:25:17 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/app/adminapi/listener/OperationLog.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/app/adminapi/listener/OperationLog.php b/server/app/adminapi/listener/OperationLog.php index d1ebb38..c67d914 100644 --- a/server/app/adminapi/listener/OperationLog.php +++ b/server/app/adminapi/listener/OperationLog.php @@ -20,7 +20,7 @@ class OperationLog * @author bingo * @date 2022/4/8 17:09 */ - public static function handle(Request $request, Response $response) + public static function handle(Request $request, Response $response): bool { //需要登录的接口,无效访问时不记录 if (!$request->controllerObject||!$request->controllerObject->isNotNeedLogin($request->action) && empty($request->adminInfo)) { @@ -33,7 +33,7 @@ class OperationLog } //获取操作注解 - $notes = ''; + $notes = '无法获取操作名称,请给控制器方法注释'; try { $re = new ReflectionClass($request->controllerObject); $doc = $re->getMethod($request->action)->getDocComment(); @@ -43,7 +43,7 @@ class OperationLog preg_match('/\s(\w+)/u', $re->getMethod($request->action)->getDocComment(), $values); $notes = $values[0]; } catch (Exception $e) { - $notes = $notes ?: '无法获取操作名称,请给控制器方法注释'; + Log::error($request->path()." 无法获取操作名称,请给控制器方法注释"); } $params = $request->all(); @@ -82,7 +82,7 @@ class OperationLog } $systemLog->result = $result; $res = $systemLog->save(); - Log::info("SystemLog id=".$systemLog->id. + Log::info("SystemLog id=".($systemLog->id??0). ' adminId='.$systemLog->admin_id. ' 请求地址:`'.$systemLog->url.'`'. ' 请求参数:`'.$systemLog->params."`". -- Gitee From 6a088a0c37471e9fd4af57f4f767feda651b33c2 Mon Sep 17 00:00:00 2001 From: suyi Date: Sat, 16 Nov 2024 13:25:53 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/app/adminapi/listener/OperationLog.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/app/adminapi/listener/OperationLog.php b/server/app/adminapi/listener/OperationLog.php index c67d914..7689898 100644 --- a/server/app/adminapi/listener/OperationLog.php +++ b/server/app/adminapi/listener/OperationLog.php @@ -14,7 +14,8 @@ class OperationLog { /** * @notes 管理员操作日志 - * @param $response + * @param Request $request + * @param Response $response * @return bool * @throws \ReflectionException * @author bingo -- Gitee From 941d12265bdc0979eb213b99cdde718a6b3426c7 Mon Sep 17 00:00:00 2001 From: suyi Date: Sat, 16 Nov 2024 13:30:40 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/config/log.php | 61 ++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/server/config/log.php b/server/config/log.php index 75916bc..14e30c6 100644 --- a/server/config/log.php +++ b/server/config/log.php @@ -11,37 +11,38 @@ * @link http://www.workerman.net/ * @license http://www.opensource.org/licenses/mit-license.php MIT License */ - +$handlers = [ + [ + 'class' => Monolog\Handler\RotatingFileHandler::class, + 'constructor' => [ + runtime_path() . '/logs/webman.log', + 7, //$maxFiles + Monolog\Logger::DEBUG, + ], + 'formatter' => [ + 'class' => Monolog\Formatter\LineFormatter::class, + 'constructor' => [null, 'Y-m-d H:i:s', true], + ], + ] +]; +if (getenv('APP_DEBUG',false)){ + /** + * 输出到控制台 + */ + $handlers[] = [ + 'class' => Monolog\Handler\StreamHandler::class, + 'constructor' => [ + 'php://stdout', + Monolog\Logger::DEBUG, + ], + 'formatter' => [ + 'class' => Monolog\Formatter\LineFormatter::class, + 'constructor' => [null, 'Y-m-d H:i:s', true], + ], + ]; +} return [ 'default' => [ - 'handlers' => [ - [ - 'class' => Monolog\Handler\RotatingFileHandler::class, - 'constructor' => [ - runtime_path() . '/logs/webman.log', - 7, //$maxFiles - Monolog\Logger::DEBUG, - ], - 'formatter' => [ - 'class' => Monolog\Formatter\LineFormatter::class, - 'constructor' => [null, 'Y-m-d H:i:s', true], - ], - ], - /** - * 输出到控制台 - */ - [ - 'class' => Monolog\Handler\StreamHandler::class, - 'constructor' => [ - 'php://stdout', - Monolog\Logger::DEBUG, - ], - 'formatter' => [ - 'class' => Monolog\Formatter\LineFormatter::class, - 'constructor' => [null, 'Y-m-d H:i:s', true], - ], - ] - - ], + 'handlers' => $handlers, ], ]; -- Gitee From d54642761477a25b278db320d27655e81e631cc7 Mon Sep 17 00:00:00 2001 From: suyi Date: Sat, 16 Nov 2024 13:36:34 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=B8=85=E7=90=86=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/app/adminapi/listener/OperationLog.php | 3 --- server/app/crontab/Task.php | 7 +++++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/server/app/adminapi/listener/OperationLog.php b/server/app/adminapi/listener/OperationLog.php index 7689898..96b17e2 100644 --- a/server/app/adminapi/listener/OperationLog.php +++ b/server/app/adminapi/listener/OperationLog.php @@ -62,9 +62,6 @@ class OperationLog if (isset($params['export']) && $params['export'] == 2) { $notes .= '-数据导出'; } - \app\common\model\OperationLog::destroy(function ($query) { - $query->where('create_time','<',strtotime("-15 day")); - },true); //记录日志 $systemLog = new \app\common\model\OperationLog(); $systemLog->admin_id = $request->adminInfo['admin_id'] ?? 0; diff --git a/server/app/crontab/Task.php b/server/app/crontab/Task.php index 8faf4ec..4d4d56e 100644 --- a/server/app/crontab/Task.php +++ b/server/app/crontab/Task.php @@ -38,6 +38,13 @@ class Task new Crontab('50 7 * * *', function(){ echo date('Y-m-d H:i:s')."\n"; }); + // 每天的2点30执行,注意这里省略了秒位 + new Crontab('30 2 * * *', function(){ + //todo 删除日志表日志 + \app\common\model\OperationLog::destroy(function ($query) { + $query->where('create_time','<',strtotime("-15 day")); + },true); + }); } } \ No newline at end of file -- Gitee From 5e9a4c12d881998965a3155b21cfed5a690271fa Mon Sep 17 00:00:00 2001 From: suyi Date: Sat, 16 Nov 2024 14:12:58 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/app/adminapi/listener/OperationLog.php | 5 ++--- server/app/adminapi/middleware/InitMiddleware.php | 4 ++-- server/app/api/middleware/InitMiddleware.php | 4 ++-- server/app/common/exception/HttpException.php | 3 ++- server/app/common/service/JsonService.php | 5 +++-- server/support/helpers.php | 7 +++---- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/server/app/adminapi/listener/OperationLog.php b/server/app/adminapi/listener/OperationLog.php index 96b17e2..9d3ffdd 100644 --- a/server/app/adminapi/listener/OperationLog.php +++ b/server/app/adminapi/listener/OperationLog.php @@ -72,13 +72,12 @@ class OperationLog $systemLog->type = $request->method(); $systemLog->params = json_encode($params, true); $systemLog->ip = getRealIP(); - $result = 0; + $systemLog->result = 0; // 正则表达式匹配指定key的值 preg_match('/"code":\s*"([^"]+)"/', $response->rawBody(), $matches); if (isset($matches[1])) { - $result = $matches[1]; + $systemLog->result = $matches[1]; } - $systemLog->result = $result; $res = $systemLog->save(); Log::info("SystemLog id=".($systemLog->id??0). ' adminId='.$systemLog->admin_id. diff --git a/server/app/adminapi/middleware/InitMiddleware.php b/server/app/adminapi/middleware/InitMiddleware.php index a57b637..e290f74 100644 --- a/server/app/adminapi/middleware/InitMiddleware.php +++ b/server/app/adminapi/middleware/InitMiddleware.php @@ -36,9 +36,9 @@ class InitMiddleware implements MiddlewareInterface //创建控制器对象 $request->controllerObject = $controllerClass; } catch (ClassNotFoundException $e) { - throw new HttpException(404, 'controller not exists:' . $e->getClass()); + throw new HttpException('controller not exists:' . $e->getClass(),404); } catch (\ReflectionException $e) { - throw new HttpException(404, 'controller init exists:' . $e->getMessage()); + throw new HttpException('controller init exists:' . $e->getMessage(),404); } return $handler($request); } diff --git a/server/app/api/middleware/InitMiddleware.php b/server/app/api/middleware/InitMiddleware.php index 8a818bc..2e2b62a 100644 --- a/server/app/api/middleware/InitMiddleware.php +++ b/server/app/api/middleware/InitMiddleware.php @@ -52,9 +52,9 @@ class InitMiddleware implements MiddlewareInterface //创建控制器对象 $request->controllerObject = $controllerClass; } catch (ClassNotFoundException $e) { - throw new HttpException(404, 'controller not exists:' . $e->getClass()); + throw new HttpException('controller not exists:' . $e->getClass(),404); } catch (NotFoundExceptionInterface $e) { - throw new HttpException(404, 'controller not exists:' . $e->getMessage()); + throw new HttpException('controller not exists:' . $e->getMessage(),404); } return $handler($request); } diff --git a/server/app/common/exception/HttpException.php b/server/app/common/exception/HttpException.php index 409c64d..703b3ae 100644 --- a/server/app/common/exception/HttpException.php +++ b/server/app/common/exception/HttpException.php @@ -11,7 +11,8 @@ class HttpException extends \RuntimeException public function __construct($message = "", $code = 0, $header=[],Throwable $previous = null) { - $this->response = json(json_decode($message,true)); + $header = array_merge($header,['Content-Type'=>'application/json']); + $this->response = response($message,$code,$header); parent::__construct($message, $code, $previous); } diff --git a/server/app/common/service/JsonService.php b/server/app/common/service/JsonService.php index e0a2c98..babf186 100644 --- a/server/app/common/service/JsonService.php +++ b/server/app/common/service/JsonService.php @@ -60,13 +60,14 @@ class JsonService * @param string $msg * @param array $data * @param int $httpStatus + * @param int $options json 格式化 * @author 乔峰 * @date 2021/12/24 18:29 */ - private static function result(int $code, int $show, string $msg = 'OK', array $data = [], int $httpStatus = 200) + private static function result(int $code, int $show, string $msg = 'OK', array $data = [], int $httpStatus = 200,...$options) { $result = compact('code', 'show', 'msg', 'data'); - return json($result, $httpStatus); + return json($result, $httpStatus,...$options); } /** diff --git a/server/support/helpers.php b/server/support/helpers.php index 8de22c0..84600ce 100644 --- a/server/support/helpers.php +++ b/server/support/helpers.php @@ -130,18 +130,17 @@ function response(string $body = '', int $status = 200, array $headers = []): Re { return new Response($status, $headers, $body); } - /** * Json response * @param $data * @param int $options * @return Response */ -function json($data, int $options = JSON_UNESCAPED_UNICODE): Response +function json($data,$httpStatus, ... $options): Response { - return new Response(200, ['Content-Type' => 'application/json'], json_encode($data, $options)); + $result = new Response($httpStatus, ['Content-Type' => 'application/json'], json_encode($data,...$options)); + return $result; } - /** * Xml response * @param $xml -- Gitee From 4fb53306da9cea61da217d16879928afb1ba8a9f Mon Sep 17 00:00:00 2001 From: suyi Date: Sat, 16 Nov 2024 14:18:57 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/app/common/service/JsonService.php | 58 ++++++++++++----------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/server/app/common/service/JsonService.php b/server/app/common/service/JsonService.php index babf186..db36136 100644 --- a/server/app/common/service/JsonService.php +++ b/server/app/common/service/JsonService.php @@ -15,56 +15,60 @@ class JsonService { /** * @notes 接口操作成功,返回信息 - * @param string $msg - * @param array $data - * @param int $code - * @param int $show + * @param string $msg 信息 + * @param array $data 数据 + * @param int $code 状态码 + * @param int $show 是否显示 + * @param int $httpStatus http状态码 + * @param int $options 可选 JSON_UNESCAPED_UNICODE json 格式化 * @author 乔峰 * @date 2021/12/24 18:28 */ - public static function success(string $msg = 'success', array $data = [], int $code = 1, int $show = 1) + public static function success(string $msg = 'success', array $data = [], int $code = 1, int $show = 1, int $httpStatus = 200,...$options): Response { - return self::result($code, $show, $msg, $data); + return self::result($code, $show, $msg, $data, $httpStatus,...$options); } /** * @notes 接口操作失败,返回信息 - * @param string $msg - * @param array $data - * @param int $code - * @param int $show + * @param string $msg 信息 + * @param array $data 数据 + * @param int $code 状态码 + * @param int $show 是否显示 + * @param int $httpStatus http状态码 + * @param int $options 可选 JSON_UNESCAPED_UNICODE json 格式化 * @author 乔峰 * @date 2021/12/24 18:28 */ - public static function fail(string $msg = 'fail', array $data = [], int $code = 0, int $show = 1) + public static function fail(string $msg = 'fail', array $data = [], int $code = 0, int $show = 1, int $httpStatus = 200,...$options): Response { - return self::result($code, $show, $msg, $data); + return self::result($code, $show, $msg, $data, $httpStatus,...$options); } /** * @notes 接口返回数据 - * @param $data + * @param array $data 数据 * @author 乔峰 * @date 2021/12/24 18:29 */ - public static function data($data) + public static function data(array $data): Response { return self::success('', $data, 1, 0); } /** * @notes 接口返回信息 - * @param int $code - * @param int $show - * @param string $msg - * @param array $data - * @param int $httpStatus - * @param int $options json 格式化 + * @param int $code 状态码 + * @param int $show 是否显示 + * @param string $msg 信息 + * @param array $data 数据 + * @param int $httpStatus http状态码 + * @param int $options 可选 JSON_UNESCAPED_UNICODE json 格式化 * @author 乔峰 * @date 2021/12/24 18:29 */ - private static function result(int $code, int $show, string $msg = 'OK', array $data = [], int $httpStatus = 200,...$options) + private static function result(int $code, int $show, string $msg = 'OK', array $data = [], int $httpStatus = 200,...$options): Response { $result = compact('code', 'show', 'msg', 'data'); return json($result, $httpStatus,...$options); @@ -72,10 +76,10 @@ class JsonService /** * @notes 抛出异常json - * @param string $msg - * @param array $data - * @param int $code - * @param int $show + * @param string $msg 信息 + * @param array $data 数据 + * @param int $code 状态码 + * @param int $show 是否显示 * @author 乔峰 * @date 2021/12/24 18:29 */ @@ -87,11 +91,11 @@ class JsonService /** * @notes 数据列表 - * @param \app\common\lists\BaseDataLists $lists + * @param BaseDataLists $lists 数据列表 * @author 令狐冲 * @date 2021/7/28 11:15 */ - public static function dataLists(BaseDataLists $lists) + public static function dataLists(BaseDataLists $lists): Response { //获取导出信息 if ($lists->export == ExportEnum::INFO && $lists instanceof ListsExcelInterface) { -- Gitee From 78f6a4d659fc7485dff07b22d4fc2d0731f2910b Mon Sep 17 00:00:00 2001 From: suyi Date: Sat, 16 Nov 2024 14:57:29 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=8F=96=E6=B6=88request=E5=AD=98=E5=80=BC?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BaseAdminController.php | 18 +++++++---- server/app/adminapi/listener/OperationLog.php | 31 ++++++++++++------- .../app/adminapi/lists/BaseAdminDataLists.php | 4 +-- .../adminapi/middleware/AuthMiddleware.php | 8 +++-- .../adminapi/middleware/InitMiddleware.php | 11 ++----- .../adminapi/middleware/LoginMiddleware.php | 8 ++--- .../app/api/controller/BaseApiController.php | 18 +++++++---- server/app/api/lists/BaseApiDataLists.php | 6 ++-- server/app/api/middleware/InitMiddleware.php | 14 ++------- server/app/api/middleware/LoginMiddleware.php | 7 +++-- .../common/http/middleware/EndMiddleware.php | 3 +- 11 files changed, 69 insertions(+), 59 deletions(-) diff --git a/server/app/adminapi/controller/BaseAdminController.php b/server/app/adminapi/controller/BaseAdminController.php index 4be299f..40df4b3 100644 --- a/server/app/adminapi/controller/BaseAdminController.php +++ b/server/app/adminapi/controller/BaseAdminController.php @@ -17,11 +17,17 @@ class BaseAdminController extends BaseLikeAdminController public function initialize() { parent::initialize(); - $this->adminId = 0; - $this->adminInfo = []; - if (isset($this->request->adminInfo) && $this->request->adminInfo) { - $this->adminInfo = $this->request->adminInfo; - $this->adminId = $this->request->adminInfo['admin_id']; - } + } + public function setAdmin($adminId,$adminInfo): void + { + $this->adminId = $adminId; + $this->adminInfo = $adminInfo; + } + public function getAdmin(): array + { + return [ + $this->adminId, + $this->adminInfo + ]; } } \ No newline at end of file diff --git a/server/app/adminapi/listener/OperationLog.php b/server/app/adminapi/listener/OperationLog.php index 9d3ffdd..539cff3 100644 --- a/server/app/adminapi/listener/OperationLog.php +++ b/server/app/adminapi/listener/OperationLog.php @@ -23,8 +23,11 @@ class OperationLog */ public static function handle(Request $request, Response $response): bool { + $controllerObject = make($request->controller); + [$adminId,$adminInfo] = $controllerObject->getAdmin(); + //需要登录的接口,无效访问时不记录 - if (!$request->controllerObject||!$request->controllerObject->isNotNeedLogin($request->action) && empty($request->adminInfo)) { + if (!$controllerObject||!$controllerObject->isNotNeedLogin($request->action) && empty($adminInfo)) { return false; } $pathLower = strtolower($request->path()); @@ -36,7 +39,7 @@ class OperationLog //获取操作注解 $notes = '无法获取操作名称,请给控制器方法注释'; try { - $re = new ReflectionClass($request->controllerObject); + $re = new ReflectionClass($controllerObject); $doc = $re->getMethod($request->action)->getDocComment(); if (empty($doc)) { throw new Exception('请给控制器方法注释'); @@ -44,7 +47,11 @@ class OperationLog preg_match('/\s(\w+)/u', $re->getMethod($request->action)->getDocComment(), $values); $notes = $values[0]; } catch (Exception $e) { - Log::error($request->path()." 无法获取操作名称,请给控制器方法注释"); + Log::error("日志记录错误",[ + 'path'=>$request->path(), + 'title'=>"无法获取操作名称,请给控制器方法注释", + 'msg'=>$e->getMessage(), + ]); } $params = $request->all(); @@ -64,10 +71,10 @@ class OperationLog } //记录日志 $systemLog = new \app\common\model\OperationLog(); - $systemLog->admin_id = $request->adminInfo['admin_id'] ?? 0; - $systemLog->admin_name = $request->adminInfo['name'] ?? ''; + $systemLog->admin_id = $adminInfo['admin_id'] ?? 0; + $systemLog->admin_name = $adminInfo['name'] ?? ''; $systemLog->action = $notes; - $systemLog->account = $request->adminInfo['account'] ?? ''; + $systemLog->account = $adminInfo['account'] ?? ''; $systemLog->url = $request->path(); $systemLog->type = $request->method(); $systemLog->params = json_encode($params, true); @@ -79,11 +86,13 @@ class OperationLog $systemLog->result = $matches[1]; } $res = $systemLog->save(); - Log::info("SystemLog id=".($systemLog->id??0). - ' adminId='.$systemLog->admin_id. - ' 请求地址:`'.$systemLog->url.'`'. - ' 请求参数:`'.$systemLog->params."`". - ' 返回结果:`'.$response->rawBody()."`"); + Log::info("日志记录",[ + 'id'=>$systemLog->id, + 'adminId'=>$systemLog->admin_id, + 'url'=>$systemLog->url, + 'params'=>$systemLog->params, + 'result'=>$response->rawBody(), + ]); return $res; } } \ No newline at end of file diff --git a/server/app/adminapi/lists/BaseAdminDataLists.php b/server/app/adminapi/lists/BaseAdminDataLists.php index 5469a93..748ad34 100644 --- a/server/app/adminapi/lists/BaseAdminDataLists.php +++ b/server/app/adminapi/lists/BaseAdminDataLists.php @@ -31,8 +31,8 @@ abstract class BaseAdminDataLists extends BaseDataLists public function __construct() { parent::__construct(); - $this->adminInfo = $this->request->adminInfo; - $this->adminId = $this->request->adminId; + $controllerObject = make($this->request->controller); + [$this->adminId,$this->adminInfo] = $controllerObject->getAdmin(); } diff --git a/server/app/adminapi/middleware/AuthMiddleware.php b/server/app/adminapi/middleware/AuthMiddleware.php index 0f3b7de..ff8bd24 100644 --- a/server/app/adminapi/middleware/AuthMiddleware.php +++ b/server/app/adminapi/middleware/AuthMiddleware.php @@ -15,17 +15,19 @@ class AuthMiddleware implements MiddlewareInterface { public function process(Request $request, callable $handler): Response { + $controllerObject = make($request->controller); + [$adminId,$adminInfo] = $controllerObject->getAdmin(); //不登录访问,无需权限验证 - if ($request->controllerObject->isNotNeedLogin($request->action)) { + if ($controllerObject->isNotNeedLogin($request->action)) { return $handler($request); } //系统默认超级管理员,无需权限验证 - if (1 === $request->adminInfo['root']) { + if (1 === $adminInfo['root']) { return $handler($request); } - $adminAuthCache = new AdminAuthCache($request->adminInfo['admin_id']); + $adminAuthCache = new AdminAuthCache($adminId); // 当前访问路径 $accessUri = strtolower($request->controller . '/' . $request->action); diff --git a/server/app/adminapi/middleware/InitMiddleware.php b/server/app/adminapi/middleware/InitMiddleware.php index e290f74..e9b2bcb 100644 --- a/server/app/adminapi/middleware/InitMiddleware.php +++ b/server/app/adminapi/middleware/InitMiddleware.php @@ -6,10 +6,8 @@ namespace app\adminapi\middleware; use app\adminapi\controller\BaseAdminController; use app\common\exception\ControllerExtendException; -use ReflectionClass; use think\exception\ClassNotFoundException; use app\common\exception\HttpException; -use Webman\App; use Webman\Http\Request; use Webman\Http\Response; use Webman\MiddlewareInterface; @@ -31,14 +29,11 @@ class InitMiddleware implements MiddlewareInterface //使用容器中的控制器对象 $controllerClass = make($request->controller); if (($controllerClass instanceof BaseAdminController) === false) { - throw new ControllerExtendException($request->controller, '404'); + throw new ControllerExtendException($request->controller, BaseAdminController::class); } - //创建控制器对象 - $request->controllerObject = $controllerClass; + $controllerClass->setAdmin(0,[]); } catch (ClassNotFoundException $e) { - throw new HttpException('controller not exists:' . $e->getClass(),404); - } catch (\ReflectionException $e) { - throw new HttpException('controller init exists:' . $e->getMessage(),404); + throw new HttpException($e->getMessage().' controller not exists:' . $e->getClass(),404); } return $handler($request); } diff --git a/server/app/adminapi/middleware/LoginMiddleware.php b/server/app/adminapi/middleware/LoginMiddleware.php index 1fea132..0005cce 100644 --- a/server/app/adminapi/middleware/LoginMiddleware.php +++ b/server/app/adminapi/middleware/LoginMiddleware.php @@ -25,8 +25,9 @@ class LoginMiddleware implements MiddlewareInterface public function process(Request $request, callable $handler): Response { $token = $request->header('token'); + $controllerObject = make($request->controller); //判断接口是否免登录 - $isNotNeedLogin = $request->controllerObject->isNotNeedLogin($request->action); + $isNotNeedLogin = $controllerObject->isNotNeedLogin($request->action); //不直接判断$isNotNeedLogin结果,使不需要登录的接口通过,为了兼容某些接口可以登录或不登录访问 if (empty($token) && !$isNotNeedLogin) { @@ -55,9 +56,8 @@ class LoginMiddleware implements MiddlewareInterface } //给request赋值,用于控制器 - $request->adminInfo = $adminInfo; - $request->adminId = $adminInfo['admin_id'] ?? 0; - + $adminId = $adminInfo['admin_id'] ?? 0; + $controllerObject->setAdmin($adminId,$adminInfo); return $handler($request); } } \ No newline at end of file diff --git a/server/app/api/controller/BaseApiController.php b/server/app/api/controller/BaseApiController.php index 1888316..b2e5cfb 100644 --- a/server/app/api/controller/BaseApiController.php +++ b/server/app/api/controller/BaseApiController.php @@ -24,11 +24,17 @@ class BaseApiController extends BaseLikeAdminController public function initialize() { parent::initialize(); - $this->userId = 0; - $this->userInfo = []; - if (isset($this->request->userInfo) && $this->request->userInfo) { - $this->userInfo = $this->request->userInfo; - $this->userId = $this->request->userInfo['user_id']; - } + } + public function setUser($userId,$userInfo): void + { + $this->userId = $userId; + $this->userInfo = $userInfo; + } + public function getUser(): array + { + return [ + $this->userId, + $this->userInfo + ]; } } \ No newline at end of file diff --git a/server/app/api/lists/BaseApiDataLists.php b/server/app/api/lists/BaseApiDataLists.php index fcf409e..c1c3f2a 100644 --- a/server/app/api/lists/BaseApiDataLists.php +++ b/server/app/api/lists/BaseApiDataLists.php @@ -26,10 +26,8 @@ abstract class BaseApiDataLists extends BaseDataLists public function __construct() { parent::__construct(); - if (isset($this->request->userInfo) && $this->request->userInfo) { - $this->userInfo = $this->request->userInfo; - $this->userId = $this->request->userId; - } + $controllerObject = make($this->request->controller); + [$this->userId,$this->userInfo] = $controllerObject->getUser(); $this->export = $this->request->get('export', ''); } diff --git a/server/app/api/middleware/InitMiddleware.php b/server/app/api/middleware/InitMiddleware.php index 2e2b62a..e4d719a 100644 --- a/server/app/api/middleware/InitMiddleware.php +++ b/server/app/api/middleware/InitMiddleware.php @@ -19,12 +19,7 @@ namespace app\api\middleware; use app\api\controller\BaseApiController; use app\common\exception\ControllerExtendException; use app\common\exception\HttpException; -use Psr\Container\ContainerExceptionInterface; -use Psr\Container\NotFoundExceptionInterface; -use ReflectionClass; use think\exception\ClassNotFoundException; -use Webman\App; -use Webman\Container; use Webman\Http\Request; use Webman\Http\Response; use Webman\MiddlewareInterface; @@ -47,14 +42,11 @@ class InitMiddleware implements MiddlewareInterface try { $controllerClass = make($request->controller); if (($controllerClass instanceof BaseApiController) === false) { - throw new ControllerExtendException($request->controller, '404'); + throw new ControllerExtendException($request->controller, BaseApiController::class); } - //创建控制器对象 - $request->controllerObject = $controllerClass; + $controllerClass->setUser(0,[]); } catch (ClassNotFoundException $e) { - throw new HttpException('controller not exists:' . $e->getClass(),404); - } catch (NotFoundExceptionInterface $e) { - throw new HttpException('controller not exists:' . $e->getMessage(),404); + throw new HttpException($e->getMessage().' controller not exists:' . $e->getClass(),404); } return $handler($request); } diff --git a/server/app/api/middleware/LoginMiddleware.php b/server/app/api/middleware/LoginMiddleware.php index 5e88b8e..e06c7a5 100644 --- a/server/app/api/middleware/LoginMiddleware.php +++ b/server/app/api/middleware/LoginMiddleware.php @@ -30,8 +30,9 @@ class LoginMiddleware implements MiddlewareInterface { // TODO: Implement process() method. $token = $request->header('token'); + $controllerObject = make($request->controller); //判断接口是否免登录 - $isNotNeedLogin = $request->controllerObject->isNotNeedLogin($request->action); + $isNotNeedLogin = $controllerObject->isNotNeedLogin($request->action); //不直接判断$isNotNeedLogin结果,使不需要登录的接口通过,为了兼容某些接口可以登录或不登录访问 if (empty($token) && !$isNotNeedLogin) { @@ -61,8 +62,8 @@ class LoginMiddleware implements MiddlewareInterface } //给request赋值,用于控制器 - $request->userInfo = $userInfo; - $request->userId = $userInfo['user_id'] ?? 0; + $userId = $userInfo['user_id'] ?? 0; + $controllerObject->setUser($userId,$userInfo); return $handler($request); } diff --git a/server/app/common/http/middleware/EndMiddleware.php b/server/app/common/http/middleware/EndMiddleware.php index e1a4422..e78c747 100644 --- a/server/app/common/http/middleware/EndMiddleware.php +++ b/server/app/common/http/middleware/EndMiddleware.php @@ -37,8 +37,9 @@ class EndMiddleware implements MiddlewareInterface public function process(Request $request, callable $handler): Response { + $controllerObject = make($request->controller); // 如果是opitons请求则返回一个空的响应,否则继续向洋葱芯穿越,并得到一个响应 - $request->controllerObject->initialize(); + $controllerObject->initialize(); return $handler($request); } -- Gitee