2.8 KiB
2.8 KiB
用户分组接口与权限说明
适用项目:Scert。更新日期:2026-09-25。
页面入口
- 系统设置位于侧栏的系统管理区域,打开已有设置面板。
- 修改密码位于用户管理页面,修改当前登录账号的密码。
- 默认分组置顶并始终展开;命名分组初始折叠。
- 普通用户进入用户中心,只显示本人资料及修改密码,不显示分组。
可见范围
| 角色 | 用户读取范围 | 分组关系 | 用户新增、编辑、删除 |
|---|---|---|---|
| 超级管理员 | 全部用户和分组 | 主账号保持受保护 | 允许,主账号保护规则不变 |
| 管理员 | 自己及所属组成员的并集 | 可加入多个命名分组 | 不允许 |
| 普通用户 | 仅自己 | 最多一个命名分组 | 不允许 |
没有命名分组的账号属于默认分组。未分组管理员可见默认组成员,但不可见其他超级管理员。管理员读取多组成员时,只返回双方共同的分组,不泄露对方的其他组名。这里限定的是用户列表可见范围,不代表域名、证书、服务器资源已经实现分组隔离。
接口
沿用现有会话认证与同源校验。
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/users |
按角色过滤的用户列表 |
| GET | /api/v1/users/:id |
查询可见用户;越权与不存在均返回 404 |
| POST | /api/v1/users |
超级管理员创建用户 |
| PUT | /api/v1/users/:id |
超级管理员更新用户 |
| DELETE | /api/v1/users/:id |
超级管理员删除用户 |
列表响应增加 current_role、current_user_id。用户对象的 groups 为字符串数组;默认组和普通用户读取时省略该字段。密码摘要不返回。
新增和更新请求支持 groups:省略或传 null 时,新增使用默认组,更新保留原关系;传 [] 清空命名分组、回到默认组。组名去首尾空白、去重并排序,区分大小写,长度为 1 到 32 个字符,不允许控制字符或保留名称“默认分组”。最多 32 个组,普通用户最多 1 个组。多组管理员降级为普通用户时,必须明确保留不超过一个组,否则返回 400,不会静默丢失分组。
分组名称由保存用户时创建;没有独立空组、组重命名或组删除接口。删除最后一个组内成员后,该组不再显示。
数据升级与验证边界
迁移版本 8 为用户表增加可空的 groups_json 文本字段。旧记录的空值解释为默认分组,保留原账号、角色和密码摘要。每次读取用户列表时重新读取当前账号分组,调组不依赖重新登录。
SQLite 的旧版本升级与重复迁移由专项测试覆盖;MySQL 和 PostgreSQL 提供迁移文件,但本次专项测试不代表这两种数据库已完成真实环境升级验收。