权限体系
权限体系
CSMS 采用 四级管理员 + 学生 的权限模型。管理范围自上而下层层收敛:上级可以管理下级,但无法越级操作不属于自己管辖范围的数据。
角色一览
| 角色 | 管辖范围 | 核心能力 |
|---|---|---|
super_admin超级管理员 | 全局(无所属学校) | 学校入驻审核、公告发布、系统设置、管理员管理、免密登录任意管理员账号、跨校封禁 |
school_admin学校管理员 | 仅本校 | 管理本校年级、教师账号、班级 |
grade_admin年级管理员 | 学校 + 年级 | 管理本年级班级、查看本年级数据 |
class_admin班级管理员(班主任) | 学校 + 年级 + 班级 | 学生管理、积分调整、座位表、数据统计 |
| 学生 | 本人 | 查看个人积分、班级排名、修改个人信息 |
范围逻辑(横向 × 纵向)
代码层面(server/utils/auth.ts)通过 schoolId / gradeId / classId 三个维度收敛权限:
- 超级管理员 / 学校管理员:
gradeId与classId为null表示「全部」(全校)。 - 年级管理员:仅能操作本年级下所有班级。
- 班级管理员:仅能操作本班。
管理员「所属」可由超级管理员按管理级别编辑,可选项受级别约束。例如班级管理员无法被提升为可管理其他班级。
跨校隔离
每所学校拥有独立的数据库文件(data/schools/{schoolId}.db),并在应用层通过 useSchoolDb(event, schoolId) 强制路由。低级别管理员在请求他人学校数据时会被权限中间件拒绝,无法越权读取或写入。
API 凭证的签发范围
外部开放 API 的凭证(api_token)签发范围强制不超过签发者自身管辖:
- 学校管理员签发的凭证,最多覆盖本校;
- 班级管理员签发的凭证,只能限定在本班。
详见 。
学生端
学生通过独立的 Token 登录(区别于管理员的 Session)。学生只能查看本人积分、所在班级排名,以及修改个人非敏感信息(如用户名)。学生端 API 前缀为 /api/student/**。
