管理端登录日志与操作审计:查询、权限和保留清理 #18

Closed
opened 2026-09-10 20:22:27 +08:00 by ila · 2 comments
Owner

来源与目标

2026-09-10 用户确认 #2 通过验收,并要求按已讨论建议新建工单并实现登录日志与操作审计。父工单 #16;前置 #2 已关闭,验收记录 7576。

管理员可以查询登录成功/失败及创建、启停、重置学习账号的审计记录,方便少量用户试用期间排查问题。参照指定本机 go-admin 日志列表结构,适配 LexGo 会话与权限,不直接接入原有原始请求/响应存储。

范围与方案

  • 管理端新增“登录日志”和“操作日志”两个列表入口;沿用现有 Element Plus 表格,账号、结果、时间范围筛选,操作日志额外动作筛选,服务端分页,时间倒序。
  • 登录记录:时间、规范账号(非法格式不记录原文)、结果、固定原因码、连接来源 IP。覆盖凭据错误、禁用、参数错误及限流;不保存密码、token、Cookie、请求/响应正文、学习内容、User-Agent 原文或地理位置。
  • 操作记录:已认证管理员、目标账号、动作(create/enable/disable/reset_password)、成功/失败、固定原因码、时间。成功操作与日志同一事务;失败操作回滚后保存失败记录,不记录输入密码或原始错误。
  • 仅管理员可查询;学习者 403、未登录 401;分页默认 20、最大 100,筛选严格校验。
  • 默认保留 90 天:查询不返回过期记录,后端启动及每小时执行分批物理清理;CLI audit-cleanup 支持运维手动清理。只删除两张 LexGo 日志表的过期记录,不提供清空全部按钮。
  • 显式版本迁移新增两张独立日志表;原用户、学习空间和会话保留。新二进制需显式 migrate 后启动;回退代码前保留新增表并恢复旧版本标记,不能删除业务数据。
  • 不引入部门/岗位/RBAC 配置、参数管理、主机监控、通用任务平台或其他默认模块。

验收标准

  • 登录成功和失败可查;非法输入不把任意原文写入日志。
  • 四类账号管理动作成功/失败可查,成功操作与日志原子提交,密码重置继续撤销旧会话。
  • 两个管理列表支持筛选、分页、空态、加载/错误状态和账号切换清理;普通用户不可访问接口。
  • 测试证明日志无凭据/请求正文;页大小边界、时间筛选和 90 天保留/清理正确。
  • MySQL 8 从 v1 增量迁移、重复迁移、回归测试及两端构建通过;本机 supervisor 服务恢复正常。

执行与文档

状态:已完成;用户已授权建单并做,完成后停在待验收。预计 3~5 人日,属于新增试用前准备范围,不替代 #3/#4 阅读核心验证。

实现顺序:先确定接口和测试 → 数据迁移、记录/查询/清理 → 管理端两个列表 → 集成/浏览器验证 → Wiki、提交、PR、待验收证据。Wiki 涉及 Home、项目档案、架构、业务规则、本地开发、需求总览和工作量;API 契约记录在工单实现评论,镜像由 Wiki 同步。

Gitea MCP 指向其他站点,继续通过目标 git.ilapage.cn API 操作,凭据仅从安全配置读取。

## 来源与目标 2026-09-10 用户确认 #2 通过验收,并要求按已讨论建议新建工单并实现登录日志与操作审计。父工单 #16;前置 #2 已关闭,验收记录 7576。 管理员可以查询登录成功/失败及创建、启停、重置学习账号的审计记录,方便少量用户试用期间排查问题。参照指定本机 go-admin 日志列表结构,适配 LexGo 会话与权限,不直接接入原有原始请求/响应存储。 ## 范围与方案 - 管理端新增“登录日志”和“操作日志”两个列表入口;沿用现有 Element Plus 表格,账号、结果、时间范围筛选,操作日志额外动作筛选,服务端分页,时间倒序。 - 登录记录:时间、规范账号(非法格式不记录原文)、结果、固定原因码、连接来源 IP。覆盖凭据错误、禁用、参数错误及限流;不保存密码、token、Cookie、请求/响应正文、学习内容、User-Agent 原文或地理位置。 - 操作记录:已认证管理员、目标账号、动作(create/enable/disable/reset_password)、成功/失败、固定原因码、时间。成功操作与日志同一事务;失败操作回滚后保存失败记录,不记录输入密码或原始错误。 - 仅管理员可查询;学习者 403、未登录 401;分页默认 20、最大 100,筛选严格校验。 - 默认保留 90 天:查询不返回过期记录,后端启动及每小时执行分批物理清理;CLI audit-cleanup 支持运维手动清理。只删除两张 LexGo 日志表的过期记录,不提供清空全部按钮。 - 显式版本迁移新增两张独立日志表;原用户、学习空间和会话保留。新二进制需显式 migrate 后启动;回退代码前保留新增表并恢复旧版本标记,不能删除业务数据。 - 不引入部门/岗位/RBAC 配置、参数管理、主机监控、通用任务平台或其他默认模块。 ## 验收标准 - [x] 登录成功和失败可查;非法输入不把任意原文写入日志。 - [x] 四类账号管理动作成功/失败可查,成功操作与日志原子提交,密码重置继续撤销旧会话。 - [x] 两个管理列表支持筛选、分页、空态、加载/错误状态和账号切换清理;普通用户不可访问接口。 - [x] 测试证明日志无凭据/请求正文;页大小边界、时间筛选和 90 天保留/清理正确。 - [x] MySQL 8 从 v1 增量迁移、重复迁移、回归测试及两端构建通过;本机 supervisor 服务恢复正常。 ## 执行与文档 状态:已完成;用户已授权建单并做,完成后停在待验收。预计 3~5 人日,属于新增试用前准备范围,不替代 #3/#4 阅读核心验证。 实现顺序:先确定接口和测试 → 数据迁移、记录/查询/清理 → 管理端两个列表 → 集成/浏览器验证 → Wiki、提交、PR、待验收证据。Wiki 涉及 Home、项目档案、架构、业务规则、本地开发、需求总览和工作量;API 契约记录在工单实现评论,镜像由 Wiki 同步。 Gitea MCP 指向其他站点,继续通过目标 git.ilapage.cn API 操作,凭据仅从安全配置读取。
Author
Owner

实现完成,待用户验收

登录日志、操作日志两个管理员列表及后端记录/查询/90 天清理已实现。查询为服务端分页,日志仅保留白名单字段。成功操作与审计原子提交;失败日志回滚后单独写入。无权限用户不可查询,重置密码仍撤销旧会话;此次未修改开发库任何已有账号。

验证:管理端 24 tests / lint / build 通过;完整 MySQL 集成测试、Go vet / build 通过;覆盖 v1→v2、重复迁移及原会话/空间保留,缺失审计表时业务/登录回滚,权限、筛选、5/6/72/73 字节既有密码回归、敏感字段、90 天保留边界和清理。修复了分页 total 清零回跳及 MySQL 时间毫秒舍入导致查询漏记录,均有回归。评审 Spec PASS / Quality PASS。

本机已迁移 schema v2,原用户4/空间4/会话2的整体指纹一致;三个 supervisor 实例仍运行,API 健康和页面正常,audit-cleanup CLI 执行成功。用于展示的 fixture.audit 登录失败记录为虚构请求,未创建该账号;21条失败记录与1条重复创建失败操作正常保留。浏览器已验证页面加载/真实记录展示,但自动化点击未触发页面事件,交互验收需用户检查,未将翻页点击记作通过。

Wiki 已更新7页并回读,20页 sync --verify 通过。同步遇到代理连接超时及429,进程级直连并降低请求频率后恢复;没有修改系统代理或 DevHarness 工具。未在开发库演练回退,方法已写入本地开发页。

提交 850c78e2aaac00d253cd782ec4b3df0e0fc9f4f6;PR #19。#17 尚未合并,新 PR 以其基础分支为目标。

## 实现完成,待用户验收 登录日志、操作日志两个管理员列表及后端记录/查询/90 天清理已实现。查询为服务端分页,日志仅保留白名单字段。成功操作与审计原子提交;失败日志回滚后单独写入。无权限用户不可查询,重置密码仍撤销旧会话;此次未修改开发库任何已有账号。 验证:管理端 24 tests / lint / build 通过;完整 MySQL 集成测试、Go vet / build 通过;覆盖 v1→v2、重复迁移及原会话/空间保留,缺失审计表时业务/登录回滚,权限、筛选、5/6/72/73 字节既有密码回归、敏感字段、90 天保留边界和清理。修复了分页 total 清零回跳及 MySQL 时间毫秒舍入导致查询漏记录,均有回归。评审 Spec PASS / Quality PASS。 本机已迁移 schema v2,原用户4/空间4/会话2的整体指纹一致;三个 supervisor 实例仍运行,API 健康和页面正常,audit-cleanup CLI 执行成功。用于展示的 fixture.audit 登录失败记录为虚构请求,未创建该账号;21条失败记录与1条重复创建失败操作正常保留。浏览器已验证页面加载/真实记录展示,但自动化点击未触发页面事件,交互验收需用户检查,未将翻页点击记作通过。 Wiki 已更新7页并回读,20页 sync --verify 通过。同步遇到代理连接超时及429,进程级直连并降低请求频率后恢复;没有修改系统代理或 DevHarness 工具。未在开发库演练回退,方法已写入本地开发页。 提交 850c78e2aaac00d253cd782ec4b3df0e0fc9f4f6;PR https://git.ilapage.cn/OPC/lexgo/pulls/19。#17 尚未合并,新 PR 以其基础分支为目标。
Author
Owner

人工验收通过

2026-09-10T20:40:04+08:00

用户在当前会话明确确认:“日志通过验收”。据此将 #18 标记已完成并关闭,同步 #16。之前自动化点击未完成的人工交互验收由本次用户确认完成;没有将自动化结果改记为通过,也未重复运行测试。实现/测试证据见评论 7587,代码提交 850c78e2aaac00d253cd782ec4b3df0e0fc9f4f6。

PR #19 和基础 PR #17 尚未合并。沿用目标 Gitea API,原因是 MCP 指向其他站点。

## 人工验收通过 2026-09-10T20:40:04+08:00 用户在当前会话明确确认:“日志通过验收”。据此将 #18 标记已完成并关闭,同步 #16。之前自动化点击未完成的人工交互验收由本次用户确认完成;没有将自动化结果改记为通过,也未重复运行测试。实现/测试证据见评论 7587,代码提交 850c78e2aaac00d253cd782ec4b3df0e0fc9f4f6。 PR #19 和基础 PR #17 尚未合并。沿用目标 Gitea API,原因是 MCP 指向其他站点。
ila closed this issue 2026-09-10 20:40:05 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/lexgo#18