## 新增功能模块 ### 1. 选课管理(elective) - 新增表:electiveCourses、courseSelections - 新增权限:ELECTIVE_MANAGE/ELECTIVE_READ/ELECTIVE_SELECT - 支持先到先得 + 抽签两种选课模式 - admin/teacher/student 三端页面 ### 2. 考试监考(proctoring) - exams 表扩展:examMode/durationMinutes/antiCheatEnabled 等字段 - 新增表:examProctoringEvents - 新增权限:EXAM_PROCTOR/EXAM_PROCTOR_READ - 教师监考面板 + 学生端防作弊监控 - API:/api/proctoring/event 接收事件上报 ### 3. 学情诊断报告(diagnostic) - 新增表:knowledgePointMastery、learningDiagnosticReports - 新增权限:DIAGNOSTIC_MANAGE/DIAGNOSTIC_READ - 基于提交答案自动计算知识点掌握度 - 生成个人/班级诊断报告(强项/弱项/建议) - 雷达图可视化 ## 其他改动 - 项目规则:单文件行数限制从 300 行调整为企业级规范(组件≤500/Actions≤800/硬上限1000) - scripts/seed.ts:消除全部 any 类型,定义内部类型,0 lint 错误 - 架构文档 004/005 同步更新三个新模块 - 迁移文件 0001_heavy_sage.sql 生成 ## 验证 - npx tsc --noEmit:0 错误 - npm run lint:0 错误 0 警告
202 lines
5.9 KiB
TypeScript
202 lines
5.9 KiB
TypeScript
import { Permissions, type Permission } from "@/shared/types/permissions"
|
|
|
|
// Role → Permission mapping
|
|
// New roles only need to add an entry here + seed the DB
|
|
export const ROLE_PERMISSIONS: Record<string, Permission[]> = {
|
|
admin: [
|
|
Permissions.EXAM_CREATE,
|
|
Permissions.EXAM_READ,
|
|
Permissions.EXAM_UPDATE,
|
|
Permissions.EXAM_DELETE,
|
|
Permissions.EXAM_DUPLICATE,
|
|
Permissions.EXAM_PUBLISH,
|
|
Permissions.EXAM_AI_GENERATE,
|
|
Permissions.HOMEWORK_CREATE,
|
|
Permissions.HOMEWORK_GRADE,
|
|
Permissions.QUESTION_CREATE,
|
|
Permissions.QUESTION_READ,
|
|
Permissions.QUESTION_UPDATE,
|
|
Permissions.QUESTION_DELETE,
|
|
Permissions.TEXTBOOK_CREATE,
|
|
Permissions.TEXTBOOK_READ,
|
|
Permissions.TEXTBOOK_UPDATE,
|
|
Permissions.TEXTBOOK_DELETE,
|
|
Permissions.CLASS_CREATE,
|
|
Permissions.CLASS_READ,
|
|
Permissions.CLASS_UPDATE,
|
|
Permissions.CLASS_DELETE,
|
|
Permissions.CLASS_ENROLL,
|
|
Permissions.CLASS_SCHEDULE,
|
|
Permissions.SCHOOL_MANAGE,
|
|
Permissions.GRADE_MANAGE,
|
|
Permissions.USER_MANAGE,
|
|
Permissions.AI_CHAT,
|
|
Permissions.AI_CONFIGURE,
|
|
Permissions.SETTINGS_ADMIN,
|
|
Permissions.AUDIT_LOG_READ,
|
|
Permissions.ANNOUNCEMENT_MANAGE,
|
|
Permissions.ANNOUNCEMENT_READ,
|
|
Permissions.GRADE_RECORD_MANAGE,
|
|
Permissions.GRADE_RECORD_READ,
|
|
Permissions.COURSE_PLAN_MANAGE,
|
|
Permissions.COURSE_PLAN_READ,
|
|
Permissions.ATTENDANCE_MANAGE,
|
|
Permissions.ATTENDANCE_READ,
|
|
Permissions.MESSAGE_SEND,
|
|
Permissions.MESSAGE_READ,
|
|
Permissions.MESSAGE_DELETE,
|
|
Permissions.SCHEDULE_AUTO,
|
|
Permissions.SCHEDULE_ADJUST,
|
|
Permissions.ELECTIVE_MANAGE,
|
|
Permissions.ELECTIVE_READ,
|
|
Permissions.EXAM_PROCTOR,
|
|
Permissions.EXAM_PROCTOR_READ,
|
|
Permissions.DIAGNOSTIC_MANAGE,
|
|
Permissions.DIAGNOSTIC_READ,
|
|
],
|
|
teacher: [
|
|
Permissions.EXAM_CREATE,
|
|
Permissions.EXAM_READ,
|
|
Permissions.EXAM_UPDATE,
|
|
Permissions.EXAM_DELETE,
|
|
Permissions.EXAM_DUPLICATE,
|
|
Permissions.EXAM_PUBLISH,
|
|
Permissions.EXAM_AI_GENERATE,
|
|
Permissions.HOMEWORK_CREATE,
|
|
Permissions.HOMEWORK_GRADE,
|
|
Permissions.QUESTION_CREATE,
|
|
Permissions.QUESTION_READ,
|
|
Permissions.QUESTION_UPDATE,
|
|
Permissions.QUESTION_DELETE,
|
|
Permissions.TEXTBOOK_CREATE,
|
|
Permissions.TEXTBOOK_READ,
|
|
Permissions.TEXTBOOK_UPDATE,
|
|
Permissions.CLASS_READ,
|
|
Permissions.CLASS_ENROLL,
|
|
Permissions.CLASS_SCHEDULE,
|
|
Permissions.AI_CHAT,
|
|
Permissions.ANNOUNCEMENT_READ,
|
|
Permissions.GRADE_RECORD_MANAGE,
|
|
Permissions.GRADE_RECORD_READ,
|
|
Permissions.COURSE_PLAN_READ,
|
|
Permissions.ATTENDANCE_MANAGE,
|
|
Permissions.ATTENDANCE_READ,
|
|
Permissions.MESSAGE_SEND,
|
|
Permissions.MESSAGE_READ,
|
|
Permissions.MESSAGE_DELETE,
|
|
Permissions.ELECTIVE_MANAGE,
|
|
Permissions.ELECTIVE_READ,
|
|
Permissions.EXAM_PROCTOR,
|
|
Permissions.EXAM_PROCTOR_READ,
|
|
Permissions.DIAGNOSTIC_MANAGE,
|
|
Permissions.DIAGNOSTIC_READ,
|
|
],
|
|
student: [
|
|
Permissions.EXAM_READ,
|
|
Permissions.HOMEWORK_SUBMIT,
|
|
Permissions.QUESTION_READ,
|
|
Permissions.TEXTBOOK_READ,
|
|
Permissions.CLASS_READ,
|
|
Permissions.AI_CHAT,
|
|
Permissions.ANNOUNCEMENT_READ,
|
|
Permissions.GRADE_RECORD_READ,
|
|
Permissions.COURSE_PLAN_READ,
|
|
Permissions.ATTENDANCE_READ,
|
|
Permissions.MESSAGE_READ,
|
|
Permissions.MESSAGE_DELETE,
|
|
Permissions.ELECTIVE_SELECT,
|
|
Permissions.ELECTIVE_READ,
|
|
Permissions.DIAGNOSTIC_READ,
|
|
],
|
|
parent: [
|
|
Permissions.EXAM_READ,
|
|
Permissions.TEXTBOOK_READ,
|
|
Permissions.CLASS_READ,
|
|
Permissions.ANNOUNCEMENT_READ,
|
|
Permissions.GRADE_RECORD_READ,
|
|
Permissions.ATTENDANCE_READ,
|
|
Permissions.MESSAGE_SEND,
|
|
Permissions.MESSAGE_READ,
|
|
Permissions.MESSAGE_DELETE,
|
|
],
|
|
grade_head: [
|
|
Permissions.EXAM_CREATE,
|
|
Permissions.EXAM_READ,
|
|
Permissions.EXAM_UPDATE,
|
|
Permissions.EXAM_DELETE,
|
|
Permissions.EXAM_DUPLICATE,
|
|
Permissions.EXAM_PUBLISH,
|
|
Permissions.EXAM_AI_GENERATE,
|
|
Permissions.HOMEWORK_CREATE,
|
|
Permissions.HOMEWORK_GRADE,
|
|
Permissions.QUESTION_CREATE,
|
|
Permissions.QUESTION_READ,
|
|
Permissions.QUESTION_UPDATE,
|
|
Permissions.QUESTION_DELETE,
|
|
Permissions.TEXTBOOK_CREATE,
|
|
Permissions.TEXTBOOK_READ,
|
|
Permissions.TEXTBOOK_UPDATE,
|
|
Permissions.CLASS_CREATE,
|
|
Permissions.CLASS_READ,
|
|
Permissions.CLASS_UPDATE,
|
|
Permissions.CLASS_ENROLL,
|
|
Permissions.CLASS_SCHEDULE,
|
|
Permissions.GRADE_MANAGE,
|
|
Permissions.AI_CHAT,
|
|
Permissions.ANNOUNCEMENT_READ,
|
|
Permissions.GRADE_RECORD_READ,
|
|
Permissions.COURSE_PLAN_READ,
|
|
Permissions.ATTENDANCE_READ,
|
|
Permissions.MESSAGE_SEND,
|
|
Permissions.MESSAGE_READ,
|
|
Permissions.MESSAGE_DELETE,
|
|
Permissions.ELECTIVE_READ,
|
|
Permissions.EXAM_PROCTOR_READ,
|
|
Permissions.DIAGNOSTIC_MANAGE,
|
|
Permissions.DIAGNOSTIC_READ,
|
|
],
|
|
teaching_head: [
|
|
Permissions.EXAM_CREATE,
|
|
Permissions.EXAM_READ,
|
|
Permissions.EXAM_UPDATE,
|
|
Permissions.EXAM_DELETE,
|
|
Permissions.EXAM_DUPLICATE,
|
|
Permissions.EXAM_PUBLISH,
|
|
Permissions.EXAM_AI_GENERATE,
|
|
Permissions.HOMEWORK_CREATE,
|
|
Permissions.HOMEWORK_GRADE,
|
|
Permissions.QUESTION_CREATE,
|
|
Permissions.QUESTION_READ,
|
|
Permissions.QUESTION_UPDATE,
|
|
Permissions.QUESTION_DELETE,
|
|
Permissions.TEXTBOOK_CREATE,
|
|
Permissions.TEXTBOOK_READ,
|
|
Permissions.TEXTBOOK_UPDATE,
|
|
Permissions.CLASS_READ,
|
|
Permissions.GRADE_MANAGE,
|
|
Permissions.AI_CHAT,
|
|
Permissions.ANNOUNCEMENT_READ,
|
|
Permissions.GRADE_RECORD_READ,
|
|
Permissions.COURSE_PLAN_READ,
|
|
Permissions.ATTENDANCE_READ,
|
|
Permissions.MESSAGE_SEND,
|
|
Permissions.MESSAGE_READ,
|
|
Permissions.MESSAGE_DELETE,
|
|
Permissions.ELECTIVE_READ,
|
|
Permissions.EXAM_PROCTOR_READ,
|
|
Permissions.DIAGNOSTIC_READ,
|
|
],
|
|
}
|
|
|
|
/**
|
|
* Merge permissions from all roles (deduplicated)
|
|
*/
|
|
export function resolvePermissions(roleNames: string[]): Permission[] {
|
|
const set = new Set<Permission>()
|
|
for (const name of roleNames) {
|
|
const perms = ROLE_PERMISSIONS[name] ?? []
|
|
for (const p of perms) set.add(p)
|
|
}
|
|
return Array.from(set)
|
|
}
|