1. 页面概览
访问控制页(/gotham/access)实现 Gotham 的 ABAC(属性基访问控制):维护「allow/deny」策略(支持优先级排序、deny 一票否决),并提供前台评估测试台,用主体/资源/环境属性 + 动作现场试算决策,每次评估落「评估留痕(traces)」备查。一句话总结:本页是情报对象访问策略的创建、试算与留痕管理中心。
2. 访问入口
2.1 路由与菜单
path /gotham/access、name GothamAccess、title Gotham 访问控制,挂在父路由 /gotham(GothamLayout)下,侧边栏菜单项「访问控制」。源码 action/web/src/views/GothamAccessPage.vue。
2.2 认证与权限
子路由 meta requiresAuth: true;请求经 gothamClient.js 附带 aip_token,401 用 gotham_refresh_token 自动换新。
2.3 端口与 API 前缀
Gotham 后端 18083,前缀 /gotham-api(baseURL /gotham-api/v1,Vite 代理重写为 /api/v1)。
3. 界面布局
Gotham 访问控制(ABAC) [刷新]
[操作结果提示 alert(可关闭)]
ABAC 评估测试台:roles / user_attrs / resource_attrs / action /
environment_attrs / user_id [执行评估][填充机密样例][填充内部样例]
→ 决策 decision(ALLOW/DENY) + reason + 命中策略
创建 ABAC 策略:名称 / 效果 / 优先级 / 动作 / subject_attrs /
resource_attrs / environment_attrs / 描述 [创建策略]
策略列表(ID/名称/效果/优先级/动作/主体/资源/状态/操作)
评估留痕(traces,ID/时间/用户/决策/命中策略/上下文)
- 评估测试台:六输入 + 三个按钮,结果区按决策着色(result-allow 绿 / result-deny 红)。
- 创建策略卡:八个字段,名称必填,效果默认 deny。
- 策略列表:展示启停状态与条件 JSON,行内仅「停用/启用」切换。
- 评估留痕:展示最近 50 条评估记录与命中策略。
4. 交互元素
| 控件 | 位置 | 含义与作用 |
|---|---|---|
| 输入「主体(roles,逗号分隔)」等六项 | 评估测试台 | 试算输入;属性类输入为 JSON,默认 {"role":"analyst"}/{"classification":"internal"} |
| 按钮「执行评估」 | 评估测试台 | POST /access-policies/evaluate,非法 JSON 时提示「属性 JSON 格式错误」 |
| 按钮「填充机密样例」「填充内部样例」 | 评估测试台 | 快捷回填 user_attrs/resource_attrs(secret / internal 两档) |
| 输入「名称 *」「效果」「优先级」 | 创建策略卡 | 效果 allow/deny(deny 一票否决);优先级数字越大越先评估 |
| 按钮「创建策略」 | 创建策略卡 | POST /access-policies,name 必填,条件字段非法 JSON 时报错 |
| 按钮「停用」/「启用」 | 策略列表 | PUT /access-policies/:id 传 {enabled} 切换状态 |
| 「刷新」按钮 | 页面头部 | 并行重拉策略与留痕两个列表 |
5. 后端关联
端点表(源码 action/products/gotham/server/server.go,处理器 handlers_abac.go):
| 方法 | 路径 | 用途 |
|---|---|---|
| GET | /access-policies | 策略列表 |
| POST | /access-policies | 创建策略(name/description/effect/priority/action/subject_attrs/resource_attrs/environment_attrs/enabled) |
| PUT | /access-policies/:id | 更新(本页用于启停) |
| POST | /access-policies/evaluate | 试算:body 含 user_id/roles/user_attrs/resource_attrs/action/environment_attrs,返回 decision+reason+matched_policy_ids |
| GET | /access-policies/traces | 评估留痕,?limit=50 |
- 决策口径:deny 一票否决——命中 deny 策略优先拒绝;否则按优先级(数字大者先)匹配 allow/deny;命中策略 id 列表随决策返回,前端以
matched_policy_ids展示。 - 留痕机制:每次评估调用后端都会落一条 trace(含 user_id、decision、policy_ids、context),前端评估成功后自动刷新留痕列表;留痕与策略为同一服务(
action/products/gotham/abac/)。 - 试算与授权分离:测试台仅为调试工具,试算结果不改变真实对象授权;实际授权由后端 PEP(
server/abac_pep.go)在请求链路上执行。
6. 权限与安全
- 页面全部接口受 JWT 保护,无公开端点。
- 策略效果 deny 一票否决,防止误放行机密对象;优先级用于解决策略冲突。
- 留痕记录每次评估的决策依据(命中策略、上下文),满足审计追溯需求。
7. 常见问题与排错
- 执行评估提示「属性 JSON 格式错误」:点「执行评估」后无结果直接报错;原因是 user_attrs/resource_attrs/environment_attrs 任一为非合法 JSON;处理:用「填充机密样例/填充内部样例」覆盖回合法样例,或修正手写 JSON。
- 评估结果与预期不符:命中 deny 策略却返回 allow,或反之;原因是策略优先级、enabled 状态、条件字段与输入属性不匹配;处理:核对策略列表的优先级与启停状态,检查试算属性是否落在策略条件内;deny 命中即拒绝。
- 留痕列表为空:traces 表无数据;原因是尚未执行过评估,或后端留痕服务未启用;处理:先执行一次「执行评估」再刷新;仍空则查后端 abac 日志与 traces 表。
- 创建策略失败:提示「创建策略失败」;原因是名称为空,或条件 JSON 非法;处理:确认名称已填;条件字段留空或填合法 JSON(如
{"role":"analyst"})。
8. 已知缺陷与边界
| 项 | 说明 |
|---|---|
| 留痕截断 | traces 仅展示最近 50 条,无分页翻页 |
| 试算不落授权 | 评估结果仅展示与留痕,不改变实际访问控制 |
| 环境条件无样例 | 前端未提供环境属性快捷样例,需手填 JSON |
注:策略删除入口已于 2026-09-06 修复(admin 可见删除按钮,调用后端 DELETE)。