架构、模块与角色

本页概述Omniscol的应用架构,以及学校一侧可见的角色。具体的合同承诺(可用性、备份、保留期限、监控)以经过确认的法律或商务文件为准。

托管与可靠性

Omniscol托管在欧盟境内,具体位于AWS巴黎和Scaleway巴黎。产品采用备份、监控机制,并在各学校账户之间做逻辑隔离;适用于某个账户的具体细节取决于合同和所涉及的环境。

用户层面的详细说明参见FAQ——安全与托管。

软件架构

  • Web应用:应用只需加载一次,之后各界面通过REST/JSON交互动态渲染(单页应用)。
  • CouchDB作为主数据库。
  • Redis作为应用端同步和日志所用的数据库。
  • TypeScript用于界面(webapp)。
  • Node.js / Express后端,负责协调内部引擎(api、webapp、portal、panel、ical、mcp、oauth2等)。
  • **C++**用于生成算法,运行在按需启动的专用虚拟机上。

安全

  • 对外通信使用HTTPS。
  • Cloudflare作为唯一入口(防DDoS保护)。
  • 密码先在客户端用scrypt预哈希,再在服务器端重新哈希并加盐。密码不会以明文存储或传输。
  • JWT认证,签名密钥与较短的有效期配合使用;密钥轮换或吊销可使已签名的令牌失效。
  • 已签名、会过期的分享链接,绑定生成它的账户,并会因该账户修改密码或被停用而失效。
  • 带有根密钥和派生令牌、接口范围和有效期的API令牌。
  • OIDC / 单点登录,视合同和账户设置而定。
  • JSON导出和内部备份,保证数据可迁出。

用户角色

Omniscol在学校一侧区分多种角色:

角色 典型用途
管理员 排课负责人、校领导、信息中心
教师 教师、外聘教师、培训师
学生 学生、大学生、学员
员工 学生管理、班主任助理、监考和值守人员(需启用人员调度模块)
分享链接 通过签名网址访问特定范围

这些名称与角色技术标识之间的对应关系,详见用户与角色。

同一位用户可以同时拥有多个角色。例如,参与排课的教师可以同时是教师和管理员。

“分享链接”角色并不对应普通的用户账户。它指的是签名链接:课表的网页链接是只读的,而某些定向链接可以允许有限的操作,例如在到期日之前填写某位教师的可用时间。

此外,还有一些内部角色仅限Omniscol团队使用:平台管理、翻译、销售和分销合作伙伴。其中部分账户出于维护的需要,可以登录学校的账户。此时他们以该学校超级管理员的身份操作,权限高于管理员:向数据库导入原始数据、启用或停用付费选项、以某位用户的名义登录。这些访问会触发可见的登录提醒,且其令牌很快过期。权力越大,责任越大。

自定义角色:对部分管理员账户的权限进行精细限制,而无需开放全部全局权限。

自定义角色

自定义角色选项可以逐个模块、逐项操作地限制管理员账户的权限。用它可以委派一部分管理工作,而不必授予全部全局权限。

同一选项还开放范围:角色限定的是可执行的操作,范围限定的是数据——排课员可以修改哪些班级、哪些校区、哪些课表。

模块

标准账户中可见的模块:

  • 主页(home)——入口页面和当日概览。
  • 课表(schedules)——查看和临时调整。
  • 仪表盘(dashboard)——教室使用率和服务时间的统计。
  • 缺勤管理(absences)——缺勤申报和代课。
  • 课表管理(timetables)——课表的构建、生成和发布。
  • 管理(admin)——用户、设置、导入/导出和集成。

视合同而定,还可能出现其他模块,尤其是用于学生管理和值守任务规划的**人员调度**。

多学校

每所学校在服务器端逻辑隔离,并访问自己的域名。一所学校的数据在应用中对其他学校不可见。不过,经申请可以在不同账户之间启用通信通道,共享教室和教师的占用冲突。这对共用楼宇的学校,或共享资源的学校集团非常有用。

另请参阅