fda82fe313
## 变更 - 权限目录新增一级分组“监控审计”,统一设备存活、埋点成功率、埋点日志和审计日志。 - 补齐 `analytics-health` 页面权限,技术角色默认拥有四项监控审计权限;运营默认仅保留设备存活。 - 新增服务端 `require_page` 守卫,四组 API 不再只依赖前端隐藏导航,直接调用也会校验角色或个人页面权限。 - 增加迁移,为存量技术角色补上 `analytics-health` 权限,并同步接口文档。 ## 验证 - 改动文件 `ruff check` 通过。 - `tests/test_admin_roles.py tests/test_analytics_health.py`: 24 passed。 - Alembic 从空库 upgrade 到 head,再 downgrade 本迁移:通过。 - 全量测试:443 passed、6 failed;6 项失败在干净 `origin/main` 上原样复现(主干为 442 passed、6 failed),与本 PR 无关。 --------- Co-authored-by: unknown <798648091@qq.com> Reviewed-on: #159 Co-authored-by: linkeyu <linkeyu@wonderable.ai> Co-committed-by: linkeyu <linkeyu@wonderable.ai>
1.9 KiB
1.9 KiB
GET /admin/api/audit-logs — 审计日志(谁改了什么,游标分页)
所属:Admin·Audit 组(前缀
/admin/api/audit-logs) | 鉴权:Bearer admin_token +audit-logs页面权限 | ← 返回 API 索引
入参(query)
| 字段 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
action |
string | ❌ | null | 按操作类型过滤,如 admin.create / admin.update |
target_type |
string | ❌ | null | 按目标对象类型过滤,如 admin |
admin_id |
int | ❌ | null | 按操作人(管理员 id)过滤 |
limit |
int | ❌ | 50 | 1–100 |
cursor |
int | ❌ | null | 上一页末条 id,首页不传 |
出参
响应 200:{ items: AdminAuditLogOut[], next_cursor: int|null }(按 id 倒序;分页见 索引#游标分页约定)
AdminAuditLogOut
| 字段 | 类型 | 说明 |
|---|---|---|
id |
int | 审计 id(也是游标) |
admin_id |
int | 操作人管理员 id |
admin_username |
string | 操作人账号(写入时快照) |
action |
string | 操作类型,如 admin.create / admin.update |
target_type |
string | 目标对象类型,如 admin |
target_id |
string | null | 目标对象 id(字符串) |
detail |
object | null | 操作详情(JSON,如变更字段) |
ip |
string | null | 操作来源 IP(取 XFF 首段或直连 IP,仅记录不鉴权) |
created_at |
datetime | 操作时间(UTC) |
错误码
401未带 admin token / token 无效或过期 / 管理员被禁用403当前管理员没有audit-logs页面权限
说明
- 整组(
/admin/api/audit-logs)守卫为require_page("audit-logs"),默认仅超级管理员和技术角色可查看,也可由超管给自定义角色授权。 - 审计日志只增不改不删,任何写操作经
write_audit落一条。数据表见 admin_audit_log。