# RBAC 权限矩阵 后端是唯一权限判定点;前端隐藏菜单和按钮只改善交互,不构成安全边界。 | 权限 | 查看者 | 编辑者 | 管理员 | 典型用途 | |---|---:|---:|---:|---| | `governance:read` | 是 | 是 | 是 | 查询治理对象、元数据、数据源、流程和服务 | | `governance:edit` | 否 | 是 | 是 | 新增、修改和删除治理对象 | | `review:approve` | 否 | 是 | 是 | 数据审核和治理变更确认 | | `orders:operate` | 否 | 是 | 是 | 处理数据订单 | | `workflow:activate` | 否 | 否 | 是 | 激活 DataFlow 对应的 n8n Workflow 版本 | | `users:manage` | 否 | 否 | 是 | 创建、停用用户、重置密码和分配角色 | ## API 边界 - 公开:`GET /api/system/health`、`POST /api/system/auth/login`。 - 当前身份:`GET /api/system/auth/me`,至少需要查看权限。 - 用户管理:`/api/system/users` 全部需要 `users:manage`。 - 系统配置和诊断:除健康检查外需要管理员权限。 - DataFlow 激活、发布和执行操作需要 `workflow:activate`。 - 数据订单变更需要 `orders:operate`。 - 其余 GET 默认需要 `governance:read`,其余写操作默认需要 `governance:edit`;无法分类的方法按管理员权限拒绝。 所有已注册 `/api/` 路由由自动化测试逐项验证能够被权限策略分类。缺少或无效 Bearer Token 返回 401;身份有效但权限不足返回 403。禁用用户后,尚未过期的 Token 也会因为服务端实时身份检查失效。 ## 身份生命周期 首位管理员只能通过 `python -m app.commands.bootstrap_admin` 显式创建;平台不提供 注册 API。后续账号由管理员创建。密码使用 Argon2id,仅保存哈希;历史 Base64 账号保留在 `users_legacy` 供核查,必须重置密码后才能迁移。系统阻止停用最后一个 有效管理员或移除其管理员角色。