\App\Http\MiddlewareLogOperMiddleware

系统操作日志中间件

职责:在认证/鉴权中间件之后运行,把已放行的管理操作落 td_log_sys_oper—— 模块中文名(字典 log_oper_module 优先、URI 首段映射兜底)、动作与业务类型 (方法+导出语义)、已脱敏请求参数、响应摘要(code/message)、HTTP 状态与 业务码、耗时、trace_id/session_id 链路标识。同步写入,写库失败仅告警不阻断响应。

┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 请求处理 handle 分区 2 · 落库 record / responseSummary / moduleLabel 分区 3 · 静态纯映射 resolveAction / resolveBusinessType / resolveModuleLabel / moduleSegment(供单元测试直接调用) └────────────────────────────────────────────────────────────┘

Summary

Methods
Properties
Constants
resetModuleLabelMemo()
handle()
resolveAction()
resolveBusinessType()
resolveModuleLabel()
No public properties found
MODULE_LABELS
No protected methods found
No protected properties found
N/A
record()
responseSummary()
moduleLabel()
moduleSegment()
$moduleLabelMemo
N/A

Constants

MODULE_LABELS

MODULE_LABELS = ['user-configs' => '用户配置', 'roles' => '角色配置', 'posts' => '岗位配置', 'menus' => '菜单维护', 'permissions' => '权限维护', 'files' => '文件库', 'companies' => '组织架构', 'org' => '组织架构', 'depts' => '组织架构', 'regions' => '行政区划', 'cache' => '数据缓存', 'configs' => '站点配置', 'dicts' => '数据字典', 'templates' => '模板引擎', 'logs' => '系统日志']

模块中文名兜底映射(URI 首段 → 功能模块)——字典 log_oper_module 不可用时的兜底常量; value 与字典同源(URI 资源段)。

Properties

$moduleLabelMemo

$moduleLabelMemo : array

模块标签进程级 memo(段 → {label, expires_at}):防每请求查字典

Type

array

Methods

resetModuleLabelMemo()

resetModuleLabelMemo() : void

清空模块标签 memo(测试隔离 / 字典批量变更后主动刷新用)

handle()

handle(\Illuminate\Http\Request  $request, \Closure  $next) : mixed

处理请求:计时放行 → 落库操作日志 → 原样返回响应。

流程:① 记录起始时间并放行 ② 计算耗时 ③ 落库(失败仅告警,审计不阻断业务)

Parameters

\Illuminate\Http\Request $request
\Closure $next

Returns

mixed —

resolveAction()

resolveAction(\Illuminate\Http\Request  $request) : string

解析动作:GET 含 export 段 → EXPORT;POST → ADD;PUT/PATCH → UPDATE; DELETE → DELETE;其余(含全部只读 GET/HEAD)→ QUERY。

Parameters

\Illuminate\Http\Request $request

Returns

string —

resolveBusinessType()

resolveBusinessType(string  $action) : int

业务类型映射(与 LogSysOper::BUSINESS_TYPE_* 对齐)

Parameters

string $action

Returns

int —

resolveModuleLabel()

resolveModuleLabel(\Illuminate\Http\Request  $request) : string

从 /api/admin/{module}/... 首段解析功能模块中文名(兜底常量映射,未命中回落原段)

Parameters

\Illuminate\Http\Request $request

Returns

string —

record()

record(\Illuminate\Http\Request  $request, \Symfony\Component\HttpFoundation\Response  $response, int  $durationMs) : void

组装并写入一条操作日志(用户/模块/动作/参数/响应/链路)

Parameters

\Illuminate\Http\Request $request
\Symfony\Component\HttpFoundation\Response $response
int $durationMs

responseSummary()

responseSummary(\Symfony\Component\HttpFoundation\Response  $response) : array

响应摘要:JSON 响应取 code/message;流式/二进制响应(如 CSV 导出)给形态标记。

Parameters

\Symfony\Component\HttpFoundation\Response $response

Returns

array —

moduleLabel()

moduleLabel(\Illuminate\Http\Request  $request) : string

模块中文名:字典 log_oper_module 优先(value=URI 首段), 字典不可用/未命中时回落 MODULE_LABELS 常量,再无回落段名。 进程级 memo:FPM/常驻进程内同段不重复查字典(每请求省 ≈5 次 Redis 往返), 10 分钟 TTL 防字典修改后标签长期滞留。

Parameters

\Illuminate\Http\Request $request

Returns

string —

moduleSegment()

moduleSegment(\Illuminate\Http\Request  $request) : string

/api/admin/ 前缀后的 URI 首段(资源名),非 admin 前缀返回空串

Parameters

\Illuminate\Http\Request $request

Returns

string —