feat: 完成 issue #134 登录认证+用户/角色管理(web/auth,RBAC 三级,OIDC 预留,接入配置台)

This commit is contained in:
2026-08-05 10:14:25 +08:00
parent faddf24d11
commit 7cf783e7c6
7 changed files with 548 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
# web/auth — iAOP 登录认证 + 用户/角色管理
issue #134 / PRD 8.2 认证鉴权。纯静态(无构建链)Demo 级实现:
登录页 + 会话管理 + 用户/角色管理 + 三级 RBAC 门控 + OIDC SSO 预留。
## 文件
```
web/auth/
├── auth.js # 共享库:用户 CRUD(加盐 SHA-256)/ 会话 / 权限矩阵 / 审计 / OIDC 配置点
├── login.html # 登录页(本地账号;配置 OIDC 后出现 SSO 入口)
├── users.html # 用户/角色管理页(仅 admin)+ OIDC 配置 + 审计日志查看
├── users.js # 管理页逻辑
└── README.md
```
## 使用
```bash
# 从 web/ 根目录起服务(studio 集成依赖 ../auth 相对路径)
cd web && python -m http.server 8083
# 打开 http://127.0.0.1:8083/auth/login.html
```
首次运行内置管理员 **admin / admin123**(登录后请立即在用户管理页改密)。
未登录访问 `web/studio/`(模板配置台)会自动跳转登录页,登录后按会话角色
应用三级 RBAC(Viewer 只读 / Editor 配置 / Publisher 发布+回滚)。
## 语义对齐
| 能力 | 对齐后端 |
|------|----------|
| 角色 readonly / engineer / admin,动作 view / edit / publish / manage | `core/template-console/rbac.py`(Resource/Action/RoleKind) |
| 用户数据(username/role/enabled/salt/hash) | `core/data-bus/config/postgres.template.yaml` users/permissions 表(Demo 落 localStorage,后端 HTTP 就绪后替换 `UserStore` 读写即可) |
| 写操作审计(时间/操作人/动作/资源/原因) | `template_registry._log` 风格 + `prompts.drain_audit` 语义 |
| OIDC 配置点(issuer/client_id/redirect_uri) | PRD 8.2 双轨:未配置走本地账号,配置后登录页出现 SSO 入口(标准授权码流程 authorize URL 已可生成;令牌换会话的后端端点待企业 IAM 就绪后对接) |
## 各前端页面接入方式
```html
<script src="../auth/auth.js"></script>
<script>
var session = Auth.requireAuth("../auth/login.html"); // 未登录 → 跳登录页
if (session) { /* Auth.can(session.role, "edit" | "publish" | "manage") 门控写操作 */ }
</script>
```
`web/studio` 已接入(未登录不可进入,写操作按会话角色门控,发布/回滚落审计);
auth.js 缺失时 studio 降级为手动角色切换演示,向后兼容。
## 安全说明(Demo 边界)
- 密码加盐 SHA-256(Web Crypto)存储,不落明文;会话 token 8 小时过期,
账号禁用/删除即时失效;
- localStorage 存储仅用于无后端 Demo;生产部署需由后端接管 users 表
(PostgreSQL)与会话签发,本库 API(login/session/can/audit)保持不变。