(2) 课程管理模块
课程模块是系统的核心模块,教师和学生通过课程联系在一起。教师拥有创建课程的权限,学生和教师则可以通过关注课程来学习。课程的评论功能,提供了师生在线交流的环境。课程拥有课程大纲、实验指导、章节、附件、专题讲座等属性,使得师生能够根据自身需求制定学习计划。
(3) 用户管理模块
用户管理模块主要用于对用户个人信息进行管理。
学生仅可登陆注册及管理自己的资料信息;教师拥有创建课程和修改课程的权限;管理员拥有最高权限,能够对所有用户数据进行管理,包括禁止某用户,重置用户密码等。
(4) 云存储模块
云存储模块主要用于和“七牛云存储平台”通信。客户端上传文件至云平台,在此之前,需要得到服务器的授权。
(5) 日志管理模块
日志模块仅做简单统计,包括HTTP的日志和SQL脚本的日志。HTTP日志主要用于统计流量和并发量,防止有人恶意刷数据;SQL日志主要用于记录数据库日志,以便在数据库错误发生时能够及时弥补。该模块仅对系统管理员和DBA开放。
3。3 基于RBAC的角色设计
Role-Based Access Control基于角色的访问控制,就是用户通过角色与权限进行关联。这个概念早在70年代就已经提出,但在相当长的一段时间并没有得到人们的关注。进入90世纪,安全需求的发展使RBAC又引起了人们的极大关注。
本系统主要涉及到三个角色,权限从小到大依次为学生、教师和管理员。权限是相对于模块而言,角色可以理解为一定数量的权限的集合,权限的载体。例如为了操作方便,每个用户拥有一个角色,每个角色拥有多个权限。这样,就构造成“用户-角色-权限”的授权模型。
如,教师角色拥有对课程新增、更新、删除等权限,学生角色不具有该权限。基于RBAC的角色设计,有助于将业务和权限分开,使检查权限更加清晰。
3。4 数据库设计
3。4。1 E-R图设计
数据库设计是系统设计的关键。数据库设计需要考虑到系统整体的架构,将每一个实体和关系考虑到。
图3-3 系统E-R图
如图所示,用户和课程是本系统的2大核心。用户主要涉及到权限的问题,有角色、权限等实体;课程属性较多,拥有评论、章节、附件等实体属性,都是一对多的关系。
同时还有一些附属的实体,如Token用于存储用户登陆的令牌,虽然其与用户表也是一对一的关系,但是由于其还涉及到创建时间、过期时间等属性,所以这里也单独的把它分离出单独的一个实体。LogHttp用于记录请求参数和返回参数,这对于统计流量和并发量有很重要的作用。File表和Image表主要用于记录用户上传的文件和头像。
考虑到系统的稳定性和扩展性,本系统选用PostgreSQL作为数据库,在主键方面,考虑到记录主键取值的扩展性,我们采用UUID(通用唯一标识码)的方式,而放弃自增值类型。
基于性能的考虑,本系统也在数据库层放弃外键的约束,数据库层仅用id作为联系,用代码进行外键的约束。
为了防止数据被意外修改或删除,本系统中所有的数据库表都拥有创建者、更新者和删除状态。也就是说所有的新建和更新都会记录操作者,且所有的删除都是假删除,即将这一条记录的删除状态置为Y即可。
3。4。2 表结构设计
相关表结构定义如下,由于数据库不做外键约束,以下表中的外键仅做逻辑约束。
表3-1 课程(COURSE)表
字段名